读书人

sql动态列的有关问题 专家来帮小弟我

发布时间: 2012-04-26 14:01:31 作者: rapoo

sql动态列的问题, 专家来帮我解决啊。。
现有表
年度 月份 类别 汇总
2008 4 书款 200
2008 3 公车 300
2008 5 书款 400
...


想转化为:
3月份 4月份 5月份 。。。。。
书款 0 200 400
公车 300 0 0
请问 高手应该如何实现


[解决办法]

SQL code
 
CREATE TABLE TB (AYEAR INT,AMONTH INT,ATYPE VARCHAR(50),ASUM INT)
INSERT INTO TB SELECT 2008,4,'书款',200
UNION ALL SELECT 2008,3 ,'公车',300
UNION ALL SELECT 2008,5 ,'书款',5

DECLARE @SQL NVARCHAR(4000)
SET @SQL='SELECT ATYPE'
SELECT @SQL=@SQL+N','+QUOTENAME(AMONTH,N'''') +N'=SUM( CASE AMONTH WHEN '+QUOTENAME(AMONTH,N'''')+N'THEN ASUM ELSE 0 END)'
FROM TB
GROUP BY AMONTH
PRINT @SQL

EXEC (@SQL+N' FROM TB GROUP BY ATYPE ')
/*
ATYPE 3 4 5
-------------------------------------------------- ----------- ----------- -----------
公车 300 0 0
书款 0 200 5

*/


[解决办法]

SQL code
DECLARE @SQL NVARCHAR(4000)SELECT @SQL=isnull(@SQL,'')+N',SUM( CASE WHEN  AMONTH='''+Convert(nvarchar,AMONTH)+N''' THEN ASUM ELSE 0 END)'+QUOTENAME(Convert(nvarchar,AMONTH)+N'月份')FROM TB GROUP BY AMONTHexec('Select atype'+@sql +' from tb group by atype') 

读书人网 >SQL Server

热点推荐