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

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 广州分公司
*/