1

我正在查询两个表:

  1. tblPurhcaseOrders- 保存具有各种列的采购订单,其中一个是称为外键的OrderTypeID
  2. tblOrderTypes- 持有4种采购订单

其中一种订单类型的tblOrderTypes添加晚于前 3 种基本类型。因此,具有这种较新订单类型的采购订单实例仅在某个时间点(2012 年 2 月)出现。

我正在编写一个聚合查询,它最终应该给我带来所有采购订单的总和,按它们的类型分组。

我确实希望结果为 0 或 NULL,即使我查询新订单类型尚不存在的时间点。

这是我的查询的样子:

SELECT
   MONTH(tblPurchaseOrders.DeliveryDate) AS sMonth,
   YEAR(tblPurchaseOrders.DeliveryDate) AS sYear, 
   tblOrderType.OrderTypeName,
   SUM(ISNULL(TotalPrice,0)) AS sValue 
FROM        
   tblPurchaseOrders 
RIGHT OUTER JOIN 
   tblOrderTypes ON tblPurchaseOrders.OrderTypeID = tblOrderTypes.OrderTypeID  
WHERE       
   MONTH(DeliveryDate) = 1  
   AND YEAR(DeliveryDate) = 2012
GROUP BY
   MONTH(DeliveryDate), YEAR(DeliveryDate), tblOrderType.OrderTypeName

现在,上面的查询工作得很好,并为我提供了正确的聚合,只是它忽略了较新的订单类型(提醒,它在 2012 年 1 月还不存在)。

如果我将查询条件更改为MONTH(DeliveryDate) = 2 AND YEAR(DeliveryDate) = 2012它会出现。

我已经尝试过完全加入,还尝试在两个表的顺序之间切换并切换到LEFT OUTER JOIN,没有运气。

4

1 回答 1

2

改变

WHERE       
   MONTH(DeliveryDate) = 1  
   AND YEAR(DeliveryDate) = 2012

进入

AND
   MONTH(DeliveryDate) = 1  
   AND YEAR(DeliveryDate) = 2012
于 2013-11-07T12:09:17.093 回答