我得到了两个select查询的联合,其中一个被查询的表是一个临时表,以确保输出记录(因此临时表具有每个日期的预期输出,但Sale列的缺省值为0
输出结果示例如下所示:
ProductID | Product Desc | TransactionDate | Sale
1011021 | SD DOG | 2017-01-07 | 0
1011021 | SD DOG | 2017-01-07 | $17
1011021 | SD DOG | 2017-01-14 | 0
1011021 | SD DOG | 2017-01-14 | $15
1011021 | SD DOG | 2017-01-21 | $21
1011021 | SD DOG | 2017-01-28 | 0
1011021 | SD DOG | 2017-01-28 | $21Union按行去重,如何让Union根据productID和transactionDate列去重,去掉Sale为0的重复?
--查询如下
SELECT transactionProducts.productID, products.productDesc, sum(salePrice) as Sale, transactionDate
FROM products LEFT JOIN transactionProducts on products.productID = transactionProducts.productID
LEFT JOIN transactions ON transactionProducts.transactionID = transactions.transactionID
LEFT JOIN productCategory on productCategory.productID = products.productID
LEFT JOIN categories on categories.categoryID = productCategory.categoryID
WHERE (transactionProducts.productID='123' AND transactions.transactionDate='2017-01-12'
Group by transactionProducts.productID, transactionDate
UNION select * from "temptable" group by productID, productDesc, Sale, transactionDate
ORDER BY transactionDate发布于 2017-01-23 06:40:19
使用not exists从临时表中选择结果集中尚不存在的行:
. . .
UNION ALL
SELECT tt.*
FROM temptable tt
WHERE NOT EXISTS (SELECT 1
FROM transactionproducts tp JOIN
transaction t
ON t.transactionID = tp.transactionID
WHERE tp.productId = tt.productId AND
t.transactionDate = tt.transactionDate
)
GROUP BY productID, productDesc, Sale, transactionDate
ORDER BY transactionDate发布于 2017-01-23 06:06:38
这样如何:
SELECT transactionProducts.productID, products.productDesc, sum(salePrice) as Sale, transactionDate
FROM products LEFT JOIN transactionProducts on products.productID = transactionProducts.productID
LEFT JOIN transactions ON transactionProducts.transactionID = transactions.transactionID
LEFT JOIN productCategory on productCategory.productID = products.productID
LEFT JOIN categories on categories.categoryID = productCategory.categoryID
WHERE (transactionProducts.productID='123' AND transactions.transactionDate='2017-01-12'
AND sum(salePrice) > 0 )
Group by transactionProducts.productID, transactionDate
UNION select * from "temptable" group by productID, productDesc, Sale, transactionDate
ORDER BY transactionDate注意,我在第一个SELECT WHERE子句中添加了“AND sum(salePrice) >0”。
HTH
https://stackoverflow.com/questions/41796565
复制相似问题