SQL Server 2005:如何将行转换为列 - 如何完成此挑战?

3
请告诉我,如何转换以下数据,
[id]  cost1  cost2    year 
   1      5     10    2010 
   1      4     15    2011 
   2     10     10    2010

将数据格式转换为[年份行到列标题]的格式。
id [cost1-2010] [cost2-2010] [cost1-2011] [cost2-2011] 
 1           5           10            4           15 
 2          10           10            0            0
4个回答


1
尝试像这样做:

DECLARE @YourTable table (id int, cost1 int, cost2 int, year int)
INSERT @YourTable VALUES (1,5,10,2010)
INSERT @YourTable VALUES (1,4,15,2011)
INSERT @YourTable VALUES (2,10,10,2010)

SELECT
    id
        ,SUM(CASE WHEN year=2010 THEN cost1 else 0 END) AS "Cost1-2010"
        ,SUM(CASE WHEN year=2010 THEN cost2 else 0 END) AS "Cost2-2010"
        ,SUM(CASE WHEN year=2011 THEN cost1 else 0 END) AS "Cost1-2011"
        ,SUM(CASE WHEN year=2011 THEN cost2 else 0 END) AS "Cost2-2010"
    FROM @YourTable
    GROUP BY id

输出

id          Cost1-2010  Cost2-2010  Cost1-2011  Cost2-2010
----------- ----------- ----------- ----------- -----------
1           5           10          4           15
2           10          10          0           0

(2 row(s) affected)

0

如果你想根据数据动态地完成这个任务,那么它会比仅使用PIVOT更加困难。对于PIVOT或条件求和技术来说,情况就不同了。

[2010Values] = ( SUM(Case when year = 2010 then FieldValue Else 0 End)

你必须提前知道列名。

如果你希望根据接收到的数据动态设置列名,那么你就必须走动态 SQL 的路线,这可能会变得很丑陋。


0

请查看此帖子上的讨论。那应该会对你有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接