sql2005 如何统计 每个月 每个地区每个型号的产品销量,要把每个地区没有销量的产品显示为0
我想要的结果
我要做一个统计,统计每年每个月每个地区的各个产品的销量,如果有些月份某个地区的型号的产品没有销量,就显示一条该地区的该产品为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
and t.yearmonth = c.yearmonth
GROUP BY t.Area,
t.YearMonth
ORDER BY t.YearMonth,t.Area
/*
AreaYEARmonthyearmonthType1Type2Type3
北京200608200608100
长沙市200608200608002
广州200608200608002
上海2006082006081710
北京2006092006090115
长沙市200609200609001
广州200609200609100
上海200609200609008
北京200610200610000
长沙市200610200610000
广州200610200610000
上海200610200610001
北京200611200611000
长沙市200611200611000
广州200611200611000
上海200611200611000
北京200612200612000
长沙市200612200612000
广州200612200612104
上海200612200612000
*/