1

Distributors と Orders の 2 つのテーブルがあります。各月の注文数を取得したい (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 に答える