繁体   English   中英

为 sql 中的列中的每个值选择两行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM