Sql server sql列到行

Sql 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

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     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

我想避免连接并要求提供简单的示例,但我无法将其集成到我的代码中,因为子查询会给出多个结果,所以我会出错。所以根据实际结构进行了更新