当前位置: 代码迷 >> Sql Server >> sql动态列的有关问题, 专家来帮小弟我解决啊
  详细解决方案

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

热度:25   发布时间:2016-04-27 13:09:55.0
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 @[email protected]+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 [email protected] +' from tb group by atype')
  相关解决方案