首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

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

2012-04-26 
sql动态列的问题, 专家来帮我解决啊。。现有表年度月份类别汇总20084书款20020083公车30020085书款400...想

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') 

热点排行