我有两张表分销商和订单。我想获得每个月的订单数量(包括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)
感谢任何输入
答案 0 :(得分: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
。