我需要从列到行。不知道如何走最好的路 我们的2008R2服务器上没有Pivot和Unpivot命令。我尝试了一个Union All设置,但似乎无法让它工作
Type S100 S50 (column header row)
Type1 5000.00 56760.00
Type2 2345.00 87650.00
到
Denom Type1 Type2 (column header row)
100 5000.00 2345.00
50 56760.00 87650.00
答案 0 :(得分:2)
你不想使用PIVOT&无论如何,UNPIVOT ......他们的痛苦超过了他们的价值。这应该可以解决问题......
IF OBJECT_ID('tempdb..#TestData', 'U') IS NOT NULL
DROP TABLE #TestData;
CREATE TABLE #TestData (
TypeId CHAR(5),
s100 MONEY,
s50 MONEY
);
INSERT #TestData(TypeId, s100, s50) VALUES
('Type1', 5000.00, 56760.00),
('Type2', 2345.00, 87650.00);
--SELECT * FROM #TestData td;
WITH
cte_Unpivot AS (
SELECT
td.TypeId,
d.Denom,
d.cValue
FROM
#TestData td
CROSS APPLY ( VALUES (100, td.s100), (50, td.s50) ) d (Denom, cValue)
)
SELECT
u.Denom,
Type1 = SUM(CASE WHEN u.TypeId = 'Type1' THEN u.cValue END),
Type2 = SUM(CASE WHEN u.TypeId = 'Type2' THEN u.cValue END)
FROM
cte_Unpivot u
GROUP BY
u.Denom
ORDER BY
u.Denom DESC;
结果...
Denom Type1 Type2
----------- --------------------- ---------------------
100 5000.00 2345.00
50 56760.00 87650.00