日期:2014-05-19  浏览次数:20487 次

菜鸟提问,大侠伸手:行转列的问题。
表   AATX(月份,项目,收入)
测试数据如下:
2006-01,销售,10020
2006-01,成本,8000
2006-01,利润,2020

2006-02,销售,20020
2006-02,成本,16000
2006-02,利润,4020

2006-03,销售,14020
2006-03,成本,10000
2006-03,利润,4020

2006-04,销售,14020
2006-04,成本,11000
2006-04,利润,3020

2006-05,销售,8000
2006-05,成本,6000
2006-05,利润,200

2006-06,销售,6020
2006-06,成本,8000
2006-06,利润,-2020
。。。
直到::::
2007-01,销售,110000
2007-01,成本,70000
2007-01,利润,40000

2007-02,销售,280000
2007-02,成本,200000
2007-02,利润,80000

2007-03,销售,166020
2007-03,成本,130000
2007-03,利润,36020

我想输出成为数据对比表:

月份                             销售                           成本                               利润
                      2006               2007           2006           2007                 2006       2007
一月               10020           110020         8000           60000               2020       40000          
二月               20020           280000         16000         200000             4020       80000    
三月               14020           166020         10000         130000             4020       36020

怎么写呢???




------解决方案--------------------
--如果是固定只有這兩年,這幾項项目,可以這麼寫
Select
Right(月份, 2) As 月份,
SUM(Case When Left(月份, 4) = '2006 ' And 项目 = N '销售 ' Then 收入 Else 0 End) As [2006销售],
SUM(Case When Left(月份, 4) = '2007 ' And 项目 = N '销售 ' Then 收入 Else 0 End) As [2007销售],
SUM(Case When Left(月份, 4) = '2006 ' And 项目 = N '成本 ' Then 收入 Else 0 End) As [2006成本],
SUM(Case When Left(月份, 4) = '2007 ' And 项目 = N '成本 ' Then 收入 Else 0 End) As [2007成本],
SUM(Case When Left(月份, 4) = '2006 ' And 项目 = N '利润 ' Then 收入 Else 0 End) As [2006销售],
SUM(Case When Left(月份, 4) = '2007 ' And 项目 = N '利润 ' Then 收入 Else 0 End) As [2007利润]
From
AATX
Group By
Right(月份, 2)
Order By
月份
------解决方案--------------------
--上面代碼有些bug,按照如下代碼修改。

Create Table AATX
(月份 Char(7),
项目 Nvarchar(20),
收入 Int)
Insert AATX Select '2006-01 ',N '销售 ',10020
Union All Select '2006-01 ',N '成本 ',8000
Union All Select '2006-01 ',N '利润 ',2020
Union All Select '2006-02 ',N '销售 ',20020
Union All Select '2006-02 ',N '成本 ',16000
Union All Select '2006-02 ',N '利润 ',4020
Union All Select '2006-03 ',N '销售 ',14020