【发布时间】:2017-01-19 02:37:20
【问题描述】:
我在各自的表格中选择了 4 个不同的列。 ProductID、ProductDesc、TransactionDate 和 TransactionPrice。
当使用以下查询作为存在记录的示例时:
SELECT transactionProducts.productID, products.productDesc, transactionDate, transactionProducts.price
FROM transactionProducts INNER JOIN transactions ON transactionProducts.transactionID = transactions.transactionID
INNER JOIN products on products.productID=transactionProducts.productID
WHERE (transactionProducts.productID='1011021' AND transactions.transactionDate='2017-01-07')
GROUP BY transactionProducts.productID, products.productDesc, transactionDate, transactionProducts.price
ORDER BY transactionDate
输出如下
ProductID | Product Desc | TransactionDate | TransactionPrice
1011021 | SD DOG | 2017-01-07 | $15
我的目标是返回一条记录,即使 productID(例如 1011021)与 transactionDate 没有关联。以下查询查询不存在的日期
SELECT transactionProducts.productID, products.productDesc, transactionDate, transactionProducts.price
FROM transactionProducts INNER JOIN transactions ON transactionProducts.transactionID = transactions.transactionID
INNER JOIN products on products.productID=transactionProducts.productID
WHERE (transactionProducts.productID='1011021' AND transactions.transactionDate='2017-01-18')
GROUP BY transactionProducts.productID, products.productDesc, transactionDate,
ORDER BY transactionDate
我会得到的当前输出是(没有找到记录):
ProductID | Product Desc | TransactionDate | TransactionPrice
| | |
我要查找的输出仍将输出查询中指定的 productID productDesc 和 transactionDate,但将 transactionPrice 返回为 0。
ProductID | Product Desc | TransactionDate | TransactionPrice
1011021 | SD DOG | 2017-01-18 | 0
如果在给定的 TransactionDate (2017-01-08) 上没有发生给定 ProductID (1011021) 的交易,我想强制将 transactionPrice 设置为 0,还有其他关于如何实现这一点的建议吗?
【问题讨论】:
-
如果没有交易,为什么会有交易日期?如果您尝试在某个范围内的每个日期强制执行 0 金额的交易,那么您需要在问题中说明这一点。
-
是的,这就是我想要做的,我现在已经在问题中说明了这一点,您有什么建议吗?
-
是的。使用函数填充您的范围内的日期临时表并完全加入它。这方面有很多例子。查找日历表。不过,有人可能会给你一个解决方案。干杯!
-
介意分享这些例子吗?
-
我在手机上,所以很难为你编码
标签: sql sql-server database azure-sql-database