我需要根据项目 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/