簡體   English   中英

將行轉置為SQL Server中的列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM