我有這樣串聯值插入行
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這個表? 在此先感謝。
我有這樣串聯值插入行
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這個表? 在此先感謝。
您可以對此使用條件聚合。
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
您可以使用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
你不需要在這裏使用子查詢。 –
也許這個查詢不需要子查詢,但我更喜歡使用這個約定。這是我的方式 –
好的。對我來說,它只是使代碼更復雜,沒有任何好處。 –
您也可以嘗試:
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
有沒有總是最多4個答案,或者是號碼動態? –
總是4個答案! –