1

我有两张表分销商和订单。我想获取每个月的订单计数(包括 0 个计数)我按 CustId 月份和年份分组。注意:客户端使用的是 SQL 2000 :(

这就是我要的

DistID   Month   Year   Orders
------------------------------
1        1       2012     4
1        2       2012     13
1        3       2012     5
2        1       2012     3
2        2       2012     0
2        3       2012     0
3        1       2012     8
3        2       2012     0
3        3       2012     3
4        1       2012     1
4        2       2012     0
4        3       2012     1
5        1       2012     6
5        2       2012     6
5        3       2012     0 

这就是我得到的

DistID   Month   Year   Orders
------------------------------
1        1       2012     4
1        2       2012     13
1        3       2012     5
2        1       2012     3
3        1       2012     8
3        3       2012     3
4        1       2012     1
4        3       2012     1
5        1       2012     6
5        2       2012     6

我知道为什么。这是因为某些月份的 Orders 表中没有一行。如果该月份和年份的 Orders 表中没有任何行,有没有办法将计数设为 0?

这是我到目前为止所拥有的

SELECT 
D.DistID,
DATEPART(MONTH, Order_Date) AS [Month],
DATEPART(YEAR, Order_Date) AS [Year],
SUM(Total_PV) AS TotalPV,
COUNT(D.DistId) AS Orders

FROM Distributor D
LEFT OUTER JOIN Order O ON D.DistID = O.Distributor_ID                                           
WHERE DATEPART(YEAR, Order_Date) > 2005
GROUP BY DistID, DATEPART(MONTH, Order_Date), DATEPART(YEAR, Order_Date)  

感谢您的任何意见

4

1 回答 1

1

您可以创建一个包含所有月份和年份的表,例如:

create table MonthList(year int, month int);

如果您填写所有可用年份,则可以left join

select  o.distributor_id
,       ml.month
,       ml.year
,       sum(o.total_pv) as totalpv
,       count(d.distid) as orders
from    monthlist ml
left join 
        [order] o 
on      datepart(year, o.order_date) = ml.year
        and datepart(month, o.order_date) = ml.month
where   ml.year > 2005
group by 
        o.distributor_id
,       ml.month
,       ml.year

Distributor如果您不使用该表中的列,则无需加入。

于 2013-01-16T22:00:07.760 回答