SQL 连接主键上的行值

标签 sql sql-server tsql

我需要根据项目 ID 连接查询不同行中的值。

例如,我有以下几行数据。

GroupID LABEL   VALUE   UNIT
    1   Name    Henry   
    1   Guest   Manny   Guest
    1   Room    12  
    1   Milk    10      Quart
    1   Eggs    3       dozen
    2   Name    Mark    Supervisor
    2   Water   13      Litre
    2   Milk    3       Gallons
    2   Soap    12      bars

作为输出,我想得到以下内容

ItemID     VALUE 

1          Name: Henry; Guest:Manny Guest; Room:12; Milk:10 Quart; Eggs: 3 dozen;

2          Name: Mark supervisor; Water: 13 litre; Milk: 3 Gallons; Soap: 12 bars;

请问我该如何做到这一点?

最佳答案

您可以根据 this example 编写递归查询(SQL Fiddle) -它现在包含处理 UNIT 列中 NULL 值的代码。

 WITH PRE 
     AS (SELECT *, 
                Row_number() 
                  OVER ( 
                    PARTITION BY GROUPID 
                    ORDER BY GROUPID) RN 
         FROM   TABLE1), 
     RECURSIVE 
     AS (SELECT *, 
                Cast(LABEL + ':' + VALUE + ' ' + Isnull(UNIT, '') + ';' AS 
                     VARCHAR( 
                     MAX)) 
                    AS FINAL 
         FROM   PRE 
         WHERE  RN = 1 
         UNION ALL 
         SELECT t1.*, 
                FINAL 
                + Cast(t1.LABEL +':' + t1.VALUE +' '+ Isnull(t1.UNIT, '') + ';' 
                AS 
                VARCHAR(MAX)) 
         FROM   PRE T1 
                INNER JOIN RECURSIVE T2 
                        ON T1.GROUPID = T2.GROUPID 
                           AND T1.RN = T2.RN + 1) 
SELECT T1.GROUPID, 
       T1.FINAL 
FROM   RECURSIVE T1 
       INNER JOIN (SELECT Max(RN) RN, 
                          GROUPID 
                   FROM   RECURSIVE 
                   GROUP  BY GROUPID) T2 
               ON T1.GROUPID = T2.GROUPID 
                  AND t1.RN = T2.RN  

关于SQL 连接主键上的行值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12853286/

相关文章:

tsql - Sybase 存储过程 - 如何在 #table 上创建索引?

php - SQL/PHP - 优化 while 循环内的查询

c# - Entity Framework 多重聚合性能

sql - TSQL - UPDATE 语句中的自动增量

sql-server - 使用Powershell从MSSQL数据库获取行数

sql - 如何使用 sql 或 t-sql 将某些列转换为行

java - 存储过程无法从 java 正确执行

mysql - SQL中的Join语句

mysql - 如何计算sql中的行数

MySQL LEFT JOIN 很慢,需要 27.82 秒