将值连接成一行

3
我有这样的数据
ID   Qusetion_NO  answer
001      1           a
001      2           b
001      4           c
002      1           d
002      2           e
002      3           f
002      4           g

我需要将B列和C列转换成一行。最好的结果是像这样:
ID     1    2    3   4
001    a    b        c
002    d    e    f   g

我该如何使用MS-SQL获取这个表格? 提前感谢。

答案的数量是否总是最多4个,还是数量是动态的? - Sean Lange
总是4个答案! - Sun Young Lee
3个回答

3
你可以使用条件聚合来实现这一点。
select ID
    , max(case when Question_NO = 1 then answer end) as [1]
    , max(case when Question_NO = 2 then answer end) as [2]
    , max(case when Question_NO = 3 then answer end) as [3]
    , max(case when Question_NO = 4 then answer end) as [4]
FROM YourTable
group by ID

3
您可以使用PIVOT来制作它。
DECLARE @T TABLE (ID VARCHAR(3),   Qusetion_NO  INT, answer VARCHAR(3))

INSERT @T
VALUES
('001',1,'a'),
('001',2,'b'),
('001',4,'c'),
('002',1,'d'),
('002',2,'e'),
('002',3,'f'),
('002',4,'g')

SELECT * FROM  
    (SELECT * FROM @T) SRC 
        PIVOT(MAX(answer) 
            FOR Qusetion_NO IN( [1], [2], [3], [4] ) ) PVT

结果:

ID   1    2    3    4
---- ---- ---- ---- ----
001  a    b    NULL c
002  d    e    f    g

你不需要在这里使用子查询。 - Sean Lange
也许这个查询不需要子查询,但我更喜欢使用这种约定。这是我的方式。 - Serkan Arslan
好的。对我来说,这只会让代码变得更加复杂,没有任何好处。 - Sean Lange

0

你也可以尝试:

    SELECT ID,
       ISNULL(CONVERT(NVARCHAR(MAX), MAX(CASE
                                             WHEN Qusetion_NO = 1
                                             THEN answer
                                         END)), '') AS [1],
       ISNULL(CONVERT(NVARCHAR(MAX), MAX(CASE
                                             WHEN Qusetion_NO = 2
                                             THEN answer
                                         END)), '') AS [2],
       ISNULL(CONVERT(NVARCHAR(MAX), MAX(CASE
                                             WHEN Qusetion_NO = 3
                                             THEN answer
                                         END)), '') AS [3],
       ISNULL(CONVERT(NVARCHAR(MAX), MAX(CASE
                                             WHEN Qusetion_NO = 4
                                             THEN answer
                                         END)), '') AS [4]
FROM <table_name>
GROUP BY ID;

期望输出:

ID     1    2    3   4
001    a    b        c
002    d    e    f   g

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接