我想使用pivot将行转换为列。如果它只有两列,我们就可以做到。如果表格超过2列,我们是否可以进行转动?
例如:
C1 C2 C3
________________________
A 10 1000
B 20 1000
C 30 1500
预期产出:
A B C
10 20 30
1000 1000 1500
答案 0 :(得分:0)
这是我发现的一种方式,即使你可以尝试使用一个支点而不是使用复杂的cte&#39>
WITH cte
AS (SELECT Max(a) a,
Max(b) b,
Max(c) c
FROM (SELECT *
FROM #Table1)a
PIVOT ( Avg(c2)
FOR c1 IN (a,
b,
c) ) AS c),
c2
AS (SELECT Max(a) a,
Max(b) b,
Max(c) c
FROM (SELECT *
FROM #Table1)a
PIVOT ( Avg(c3)
FOR c1 IN (a,
b,
c) ) AS c3) SELECT *
FROM cte
UNION ALL
SELECT *
FROM c2
答案 1 :(得分:0)
这是使用PIVOT和表值构造函数的简单方法
CREATE TABLE myTable
([C1] varchar(1), [C2] int, [C3] int)
;
INSERT INTO myTable
([C1], [C2], [C3])
VALUES
('A', 10, 1000),
('B', 20, 1000),
('C', 30, 1500)
;
SELECT [A],[B],[C]
FROM (
SELECT ca.*
FROM myTable mt
CROSS APPLY (VALUES(mt.C1, 1, mt.C2),(mt.C1, 2, mt.C3)) ca(col, rn, val)
) t
PIVOT (
MAX(val)
FOR col IN ([A],[B],[C])
) p
Cross Apply将为每列创建一个新行(C2,C3)col
是C1值(A,B,C)rn
只是一个RowNumber值来分隔值,所以PIVOT不会合并它们而只选择MAX而val
只是C2和C3值