日期:2014-05-17  浏览次数:20575 次

sql2005 如何统计 每个月 每个地区每个型号的产品销量,要把每个地区没有销量的产品显示为0
本帖最后由 oXiang1234567897 于 2013-10-16 10:26:42 编辑
统计出来的结果:



我想要的结果




我要做一个统计,统计每年每个月每个地区的各个产品的销量,如果有些月份某个地区的型号的产品没有销量,就显示一条该地区的该产品为0的记录。统计出来的结果要无论该产品是否有销量,每个地区的每种型号都必须出现在每个月。

sql2005 sql查询语句

------解决方案--------------------
是这样的效果吗:



WITH CTE (Area,YearMonth,Type1,Type2,Type3)
AS (
SELECT N'长沙市',    '200608',null,null,2        UNION ALL
SELECT N'上海',        '200608',1,    7,10            UNION ALL
SELECT N'北京',        '200608',1,null,null        UNION ALL
SELECT N'广州',        '200608',null,null,2        UNION ALL
SELECT N'长沙市',    '200609',null,null,1        UNION ALL
SELECT N'上海',        '200609',null,null,8        UNION ALL
SELECT N'北京',        '200609',null, 1,15            UNION ALL
SELECT N'广州',        '200609',1,null,null        UNION ALL
SELECT N'上海',        '200610',null,null,1        UNION ALL
SELECT N'广州',        '200610',null,null,null        UNION ALL
SELECT N'长沙市',    '200611',null,null,null        UNION ALL
SELECT N'广州',        '200612',1,null,4           
),  

t
as
(
select a.area,
       b.yearmonth
from (select distinct area from cte) a
cross join (select distinct yearmonth from cte)b
)



SELECT t.Area
    ,SUBSTRING(t.YearMonth,1,4) [YEAR],
SUBSTRING(t.YearMonth,5,2)[month],
t.yearmonth
    ,ISNULL(SUM(c.Type1),0) AS Type1
    ,ISNULL(SUM(c.Type2),0) AS Type2
    ,ISNULL(SUM(c.Type3),0) AS Type3
FROM t
left join CTE c
       on t.area = c.area