在SQL Server中将行转换为列

在SQL Server中将行转换为列,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,有没有办法转置此表: 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 非常感谢 您可以使用行数和条件聚合来执行此操作: WITH Cte AS( SELECT *, rn = ROW_NUMBER() OVER(PARTITION BY col1 ORDER BY col2) FROM #tbl )

有没有办法转置此表:

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       
非常感谢

您可以使用行数和条件聚合来执行此操作:

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
您可以使用行数和条件聚合来执行此操作:

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
的动态sql版本

质疑

结果

的动态sql版本

质疑

结果

+---+---+---+
| A | B | C |
+---+---+---+
| a | e | g |
| b | f | h |
| c |   | i |
| d |   |   |
+---+---+---+