假设你有一张桌子,比如:
| key | status |
| --- | ------ |
| 3 | A |
| 4 | A |
| 4 | C |
| 5 | B |
| 6 | B |
| 6 | C |
| 7 | A |
| 7 | B |我想要一个查询,在单个行中返回包含特定status但应用一些优先级规则的行数。每一行的规则都是不同的,如下所示:
状态为A
b_count =任何具有B状态的不同key计数的a_count =计数,但相同的键也不以状态为C的状态的c_count =计数的状态出现,但相同的键也不会以A或B的状态出现要点是,所有计数的总数应该等于源表中不同键的总数。在我上面的样本数据中,结果应该是:
| a_count | b_count | c_count |
| ------- | ------- | ------- |
| 3 | 2 | 0 |发布于 2022-08-17 00:35:12
应该能够使用case语句执行枢轴操作,而不存在。
SELECT Count (CASE
WHEN status = 'A' THEN 1
ELSE 0
END) AS a_count,
Count (CASE
WHEN status = 'B'
AND NOT EXISTS (SELECT 1
FROM mytable b
WHERE a.KEY = b.KEY
AND b.status = 'A') THEN 1
ELSE 0
END) AS b_count,
Count (CASE
WHEN status = 'C'
AND NOT EXISTS (SELECT 1
FROM mytable c
WHERE a.KEY = c.KEY
AND c.status IN ( 'A', 'B' )) THEN 1
ELSE 0
END) AS c_count
FROM mytable a https://stackoverflow.com/questions/73381638
复制相似问题