Sql server sql列到行
Iam试图根据ID带来列值字符串concat 我写了一个sql,但似乎有一些问题 表1具有col1和col2 表2具有col1和col3 表3具有col1 col4和col5Sql server sql列到行,sql-server,tsql,pivot,Sql Server,Tsql,Pivot,Iam试图根据ID带来列值字符串concat 我写了一个sql,但似乎有一些问题 表1具有col1和col2 表2具有col1和col3 表3具有col1 col4和col5 COL1 COL2 COL3 COL4 COL5 1000 APPLE 50 92 TESTING 1000 APPLE 50 92 ALPHA 1000 APPLE 50
COL1 COL2 COL3 COL4 COL5
1000 APPLE 50 92 TESTING
1000 APPLE 50 92 ALPHA
1000 APPLE 50 92 BETA
1000 APPLE 50 92 OMEGA
2000 ORANGE 60 90 DELTA
2000 ORANGE 60 90 TEST
2000 ORANGE 60 90 SLEEP
我想输出如下
1000 APPLE 50 92 TESTINGALPHABETAOMEGA
2000 ORANGE 60 90 DELTATESTSLEEP
您可以使用SQL Server的xml扩展来连接行:
SELECT COL1,
COL2,
COL3,
COL4,
MessageList = ( SELECT Col5 + ''
FROM T1 AS T2
WHERE T1.Col1 = T2.Col1
AND T1.Col2 = T2.Col2
AND T1.Col3 = T2.Col3
AND T1.Col4 = T2.Col4
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
FROM T1
GROUP BY Col1, Col2, Col3, Col4;
有关如何工作的更详细说明,请参见
编辑
下面是一个更新的解决方案,展示了如何使用2个表
SELECT T1.COL1,
T1.COL2,
T2.COL3,
T2.COL4,
MessageList = ( SELECT '' + Col5
FROM T2 AS T3
WHERE T1.Col1 = T3.Col1
AND T2.Col3 = T3.Col3
AND T2.Col4 = T3.Col4
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
FROM T1
INNER JOIN T2
ON T1.Col1 = T2.Col1
GROUP BY T1.Col1, T1.Col2, T2.Col3, T2.Col4;
假设您有SQL server 2017+您可以使用STRING_AGG
SELECT t1.col1,
col2,
col3,
col4
STRING_AGG(Col5, CHAR(10)+CHAR(13)) WITHIN GROUP (ORDER BY col2)
FROM Table1 t1 join Table2 t2
on t1.Col1 = t2.Col1 join Table3 t3
on t1.Col1 = t3.Col1 join Table4 t4
on t1.col1 = t4.Col1
GROUP BY t1.col1,col2,col3,col4
我想避免连接并要求提供简单的示例,但我无法将其集成到我的代码中,因为子查询会给出多个结果,所以我会出错。所以根据实际结构进行了更新