[英]Transpose rows to columns in SQL Server
有沒有辦法轉置此表:
A a
A b
A c
A d
B e
B f
C g
C h
C i
對此嗎?
A B C
a e g
b f h
c i
d
非常感謝!
您可以使用ROW_NUMBER
和條件聚合來做到這一點:
WITH Cte AS(
SELECT *,
rn = ROW_NUMBER() OVER(PARTITION BY col1 ORDER BY col2)
FROM #tbl
)
SELECT
A = MAX(CASE WHEN col1 = 'A' THEN col2 END),
B = MAX(CASE WHEN col1 = 'B' THEN col2 END),
C = MAX(CASE WHEN col1 = 'C' THEN col2 END)
FROM Cte
GROUP BY rn
Felix Pamittan's answer
動態SQL版本
詢問
DECLARE @sql AS VARCHAR(MAX);
SELECT @sql = 'WITH Cte AS(
SELECT *, rn = ROW_NUMBER() OVER(
PARTITION BY col1 ORDER BY col2
)
FROM your_table_name
) SELECT '
+ STUFF((
SELECT DISTINCT
',COALESCE(MAX(CASE col1 WHEN ''' + col1 + ''' THEN col2 END), '''') AS [' + col1 + ']'
FROM your_table_name
FOR XML PATH('')), 1, 1, '');
SELECT @sql += ' FROM cte GROUP BY rn;';
EXEC(@sql);
結果
+---+---+---+
| A | B | C |
+---+---+---+
| a | e | g |
| b | f | h |
| c | | i |
| d | | |
+---+---+---+
Find demo here
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.