50分急求行列转换的SQL语句
原表:
年月 数量 公司
2007年1月 10 广州分公司
2007年2月 5 广州分公司
2007年3月 3 广州分公司
2007年1月 8 佛山分公司
2007年2月 10 佛山分公司
2007年4月 80 江门分公司
2007年7月 10 中山分公司
需要查询的表现结果是:
年月 数量 年月 数量 年月 数量 年月 数量 年月 数量 公司
2007年7月 0 2007年4月 0 2007年3月 3 2007年2月 5 2007年1月 10 广州分公司
2007年7月 0 2007年4月 0 2007年3月 0 2007年2月 10 2007年1月 8 佛山分公司
2007年7月 0 2007年4月 80 2007年3月 0 2007年2月 0 2007年1月 0 江门分公司
2007年7月 10 2007年4月 0 2007年3月 0 2007年2月 0 2007年1月 0 中山分公司
------解决方案--------------------或者是直接這樣的。
Create Table 表
(年月 Varchar(10),
数量 Int,
公司 Varchar(10))
Insert 表 Select '2007年1月 ', 10, '广州分公司 '
Union All Select '2007年2月 ', 5, '广州分公司 '
Union All Select '2007年3月 ', 3, '广州分公司 '
Union All Select '2007年1月 ', 8, '佛山分公司 '
Union All Select '2007年2月 ', 10, '佛山分公司 '
Union All Select '2007年4月 ', 80, '江门分公司 '
Union All Select '2007年7月 ', 10, '中山分公司 '
GO
Declare @S Varchar(8000)
Select @S = 'Select '
Select @S = @S + ' SUM(Case 年月 When ' ' ' + 年月 + ' ' ' Then 数量 Else 0 End) As [ ' + 年月 + '数量], '
From 表 Group By 年月 Order By 年月 Desc
Select @S = @S + ' 公司 From 表 Group By 公司 '
EXEC(@S)
GO
Drop Table 表
/*
2007年7月数量 2007年4月数量 2007年3月数量 2007年3月数量 2007年1月数量 公司
10 0 0 0 0 中山分公司
0 80 0 0 0 江门分公司
0 0 0 10 8 佛山分公司
0 0 3 5 10 广州分公司
*/