1

見積もりと呼ばれるテーブル B の「Required_by_Date」に基づいて、「Quote_Items」と呼ばれるテーブル A の「Qty」の合計を取得しようとしています。どちらのテーブルにも共通の「Quote_No」があります。必要な日付は 1 か月前です。

以下を使用しましたが、NULLが生成されますが、理由がわかりません

select sum(Qty) 
from quotes.Quote_Items_Quantities 
      left outer join quotes.Quotes on (Quote_Required_by_Date = Qty)
WHERE (DatePart(yy, Quote_Required_by_Date) = DatePart(yy, DateAdd(m,1,getdate()))) and
      datepart(m,Quote_Required_by_Date) = datepart(m,dateadd(m,1,getdate()))

ここで私が間違っていることを提案してください。

4

2 に答える 2

0

あなたのクエリはNULL、条件のために生成されていjoinます。あなたが持っている

on Quote_Required_by_Date = Qty

ただし、日付は数量と一致しません。Quote_No代わりに、質問によると、 で一致させる必要があります。

select sum(Qty) 
from quotes.Quote_Items_Quantities qiq left outer join
     quotes.Quotes q
     on q.Quote_Required_by_Date = qiq.Qty
WHERE (DatePart(yy, Quote_Required_by_Date) = DatePart(yy, DateAdd(m,1,getdate()))) and
      datepart(m,Quote_Required_by_Date) = datepart(m,dateadd(m,1,getdate()));

month()およびyear()関数を使用して、クエリを簡素化することもできます。

select sum(Qty) 
from quotes.Quote_Items_Quantities qiq left outer join
     quotes.Quotes q
     on q.Quote_Required_by_Date = qiq.Qty
WHERE year(Quote_Required_by_Date) = year(DateAdd(m, 1, getdate()) and
      month(Quote_Required_by_Date) = month(dateadd(m,1,getdate());

group by最後に、何ヶ月も使用して結果を得ると便利だと思います。

select year(Quote_Required_by_Date), month(Quote_Required_by_Date), sum(Qty)
from quotes.Quote_Items_Quantities qiq left outer join
     quotes.Quotes q
     on q.Quote_Required_by_Date = qiq.Qty
group by year(Quote_Required_by_Date), month(Quote_Required_by_Date)
order by 1 desc, 2 desc;
于 2013-07-21T11:33:53.840 に答える
0

これを試して:

SELECT SUM(i.Qty)
FROM Quote_Items i
JOIN Quotes q on i.Quote_No = q.Quote_No
AND CONVERT(varchar, q.Required_by_Date, 112) = CONVERT(varchar, DATEADD(month, -1, getdate()), 112)

またはこれ(JOINを使用しない場合と同等)

SELECT SUM(i.Qty)
FROM Quote_Items i
WHERE EXISTS(SELECT 1 FROM Quotes WHERE Quote_No = i.Quote_No AND CONVERT(varchar, Required_by_Date, 112) = CONVERT(varchar, DATEADD(month, -1, getdate()), 112))
于 2013-07-21T11:26:01.373 に答える