- 爱易网页
-
MSSQL教程
- 初学者提问,大侠伸手:行转列的有关问题
日期: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