首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于2列从UNION结果中过滤重复项

问基于2列从UNION结果中过滤重复项
EN

Stack Overflow用户
提问于 2017-01-23 05:54:46
回答 2查看 1.7K关注 0票数 0

我得到了两个select查询的联合,其中一个被查询的表是一个临时表,以确保输出记录(因此临时表具有每个日期的预期输出,但Sale列的缺省值为0

输出结果示例如下所示:

代码语言:javascript
复制
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      | $21

Union按行去重,如何让Union根据productID和transactionDate列去重,去掉Sale为0的重复?

--查询如下

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-23 06:40:19

使用not exists从临时表中选择结果集中尚不存在的行:

代码语言:javascript
复制
. . .
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
票数 1
EN

Stack Overflow用户

发布于 2017-01-23 06:06:38

这样如何:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41796565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档