有一个表里面有各种货物每天的销售量.
table
时间 销量
2014-01-01 15:20:25 3
2014-02-21 16:11:23 2
2015-01-05 11:14:21 1
2015-02-11 15:21:11 2
希望得到的数据格式如下: 没有数据的月份显示为0
月份 2014年销量 2015年销量
1 3 1
2 2 2
3 0 0
4 0 0
5 0 0
6 0 0
7 0 0
8 0 0
9 0 0
10 0 0
11 0 0
12 0 0
------解决思路----------------------
select rownum as m from x from dual connect by rownum <=12
用上面这个, left join 你现在的结果集,就可以了。
------解决思路----------------------
--动态
DECLARE @SQL VARCHAR(8000)--SQL2005+可以用VARCHAR(MAX)代替
SET @SQL='SELECT T1.number 月份'
SELECT @SQL=@SQL+',SUM(CASE WHEN YEAR(T2.时间)='+CONVERT(VARCHAR(4),时间,120)+' THEN T2.销量 ELSE 0 END)['+CONVERT(VARCHAR(4),时间,120)+'年销量]'
FROM [table] GROUP BY CONVERT(VARCHAR(4),时间,120)
SET @SQL=@SQL+'FROM master..spt_values T1 LEFT JOIN [table] T2 ON T1.number=MONTH(T2.时间)'
+'WHERE T1.type=''P''AND T1.number>0 AND T1.number<=12 GROUP BY T1.number'
PRINT @SQL
EXEC(@SQL)
--静态
SELECT T1.number 月份
,SUM(CASE WHEN YEAR(T2.时间)=2014 THEN T2.销量 ELSE 0 END)[2014年销量]
,SUM(CASE WHEN YEAR(T2.时间)=2015 THEN T2.销量 ELSE 0 END)[2015年销量]
FROM master..spt_values T1
LEFT JOIN [table] T2 ON T1.number=MONTH(T2.时间)
WHERE T1.type='P'AND T1.number>0 AND T1.number<=12 GROUP BY T1.number