[英]selecting two rows for each value in a column in sql
我有一张如下表。 我只需要获取同时具有 Products'Prod1' 和 'Prod2' 的帐户。 我需要过滤掉其中一个既没有产品也没有与之关联的产品的帐户。 例如,尽管 Acc3 具有与之关联的 Prod1,但不应在查询 output 中选择它。 如何构建查询来实现这一点?
帐户 | 产品 |
---|---|
ACC1 | 产品1 |
ACC1 | 产品2 |
ACC1 | 产品3 |
ACC2 | 产品1 |
ACC2 | 产品2 |
ACC2 | 产品4 |
ACC3 | 产品1 |
ACC3 | 产品5 |
ACC3 | 产品6 |
Output:
帐户 | 产品 |
---|---|
ACC1 | 产品1 |
ACC1 | 产品2 |
ACC2 | 产品1 |
ACC2 | 产品2 |
一种方法使用聚合:
WITH cte AS (
SELECT Account
FROM yourTable
WHERE Product IN ('Prod1', 'Prod2')
GROUP BY Account
HAVING MIN(Product) <> MAX(Product)
)
SELECT Account, Product
FROM yourTable
WHERE Product IN ('Prod1', 'Prod2') AND
Account IN (SELECT Account FROM cte);
使用联合的方法
SELECT Account, Product
FROM yourTable WHERE Product = 'Prod1'
UNION ALL
SELECT Account, Product
FROM yourTable WHERE Product = 'Prod2'
ORDER BY Account
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.