当前位置: 代码迷 >> Sql Server >> 有一个表里统计月分每日的销售量
  详细解决方案

有一个表里统计月分每日的销售量

热度:33   发布时间:2016-04-24 09:06:01.0
有一个表里统计月分每天的销售量.
有一个表里面有各种货物每天的销售量.

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
  相关解决方案