给出一个包含以下数据的表
ID Value
1 A
1 B
1 C
1 D
2 A
2 C
3 A
我想构建一个查询,根据存在的值A返回id集中缺少哪些值。可以假设“A”的ID始终存在。 结果:
ID | B | C | D
2 | 0 | 1 | 0
3 | 0 | 0 | 0
值为A,B,C,D。在此示例中,所有值都用于ID 1,但是如果A是ID 2的值,则表格报告缺少B,依此类推。
我有一个查询来返回给定值缺少哪个ID但是我还没有找到将所有三个ID加在一起的方法:
select id
from table_1
where id not in (
select id
from table_1
where value = 'B' #additional queries replacing 'B' with 'C' and 'D'
) and value = 'A'
order by id asc
是否可以将这三个单独的查询组合到我已经列出的结果表中?我觉得这需要内部联接,但是无法构建一个有效的查询。
答案 0 :(得分:1)
您可以使用条件聚合:
SELECT id,
SUM(Value = 'A') AS a,
SUM(Value = 'B') AS b,
SUM(Value = 'C') AS c,
SUM(Value = 'D') AS d
FROM tab
GROUP BY id;
<强> DBFiddle Demo 强>
必须事先知道值列表(A,B,C,D)。
如果存在所有值,则跳过行:
SELECT *
FROM (
SELECT id, SUM(Value = 'A') AS a,
SUM(Value = 'B') AS b,
SUM(Value = 'C') AS c,
SUM(Value = 'D') AS d
FROM tab
GROUP BY id
) sub
WHERE NOT (a>0 and b>0 and c>0 and d>0);
<强> DBFiddle Demo2 强>