SQL:Groupby并将一​​列下的不同行值排列到第二列中的一个水平行

时间:2017-11-13 17:35:04

标签: sql sql-server

请参阅我想要实现的逻辑(更容易在表格中显示而不是在文本中描述):

enter image description here

使用python,我能够使用下面的代码实现我想要的表:

df_3 = df_2.groupby(['a', 'b', 'c'])['reqmnt'].apply(' '.join).reset_index()

我如何在SQL中执行此操作?

1 个答案:

答案 0 :(得分:0)

以下内容适用于您:

DECLARE @T table
(
    a varchar(10)
    , b varchar(10)
    , c varchar(10)
    , reqmnt varchar(255)
)

INSERT INTO @T (a, b, c, reqmnt)
VALUES
('AC1', 'BA2', 'test', 'C1')
, ('AC1', 'BA2', 'test', 'PAN')
, ('AC1', 'BA2', 'test', 'Woot')

SELECT DISTINCT
    a
    , b
    , c
    ,
        RTRIM(
            (
                SELECT reqmnt + ' '
                FROM @T t2
                WHERE
                    t2.a = t1.a
                    AND t2.b = t1.b
                    AND t2.c = t1.c
                ORDER BY reqmnt -- this line is optional
                FOR XML PATH ('')
            )
        ) reqmnt
FROM @T t1