1

我正在尝试根据表 B 中名为 Quotes 的“Required_by_Date”来获取名为“Quote_Items”的表 A 中的“数量”总和。两个表都有一个共同的“Quote_No”要求的日期是一个月前。

我使用了以下,但它产生一个 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()andyear()函数来简化查询:

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 回答