【发布时间】:2012-08-22 13:57:57
【问题描述】:
我正在使用 MS SQL。我有两张桌子:
1) “OrderProducts” - 此表存储订单拥有的所有产品。还有另一个 Orders 主表,我们可以从这张图中省略。 Orders 主表存储订单的主要数据,而 OrderProducts 表存储详细信息。
2) “TransactionFeeProducts” - 此表存储我要为订单收取的所有产品交易费用。它有一个 BatchID,其中多个产品可以有相同的 BatchID。
基本上,OrderDate 介于 TransactionFeeProducts.FromDate 和 TransactionFeeProducts.ToDate 之间的所有订购产品,都将收取 TransactionFeeProducts.TransactionFee
订购产品
- 产品ID
- 数量
- 订购日期
TransactionFeeProducts
- 批次ID
- 产品ID
- 从日期
- 至今
- 交易费用
SQL:
SELECT SUM(Quantity) as Orders,
TransactionFeeProducts.ProductID, FromDate, ToDate
FROM TransactionFeeProducts
LEFT JOIN OrderProducts ON TransactionFeeProducts.ProductID = OrderProducts.ProductID
WHERE
OrderDate >= TransactionFeeProducts.FromDate AND
OrderDate <= TransactionFeeProducts.ToDate AND
TransactionFeeProducts.BatchID = 3
GROUP BY TransactionFeeProducts.ProductID, FromDate, ToDate
ORDER BY SUM(Quantity) DESC
我希望 SQL 返回 TransactionFeeProducts 中 BatchID = 3 的所有记录。 SUM(Quantity) 应该只给我在 TransactionFeeProducts.FromDate 和 TransactionFeeProducts.ToDate 之间进行 OrderDate 的总和
如果 SUM(Quantity) 为 0,则该字段应为 NULL 或 0。
我现在的问题是,如果 SUM(Quantity) 为 0,SQL 不会返回任何记录。
请帮忙。非常感谢。
【问题讨论】:
标签: sql sql-server-2008 inner-join