2017-10-09 25 views
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這個表? 在此先感謝。

+0

有沒有總是最多4個答案,或者是號碼動態? –

+0

總是4個答案! –

回答

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

你不需要在這裏使用子查詢。 –

+0

也許這個查詢不需要子查詢,但我更喜歡使用這個約定。這是我的方式 –

+0

好的。對我來說,它只是使代碼更復雜,沒有任何好處。 –

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