Sql 如果存在其他记录,则排除组中记录的值
在下面的示例表中,我试图找出一种方法,将id中不存在标记“C”的所有标记的id金额相加。当id中存在标记“C”时,我需要该id上的金额总和,不包括标记“a”的金额。如图所示,我想要的输出在底部。我曾考虑过使用分区和EXISTS命令,但在概念化解决方案时遇到了问题。如果你们中的任何人能看一看并为我指出正确的方向,我们将不胜感激: 样本表:Sql 如果存在其他记录,则排除组中记录的值,sql,oracle,Sql,Oracle,在下面的示例表中,我试图找出一种方法,将id中不存在标记“C”的所有标记的id金额相加。当id中存在标记“C”时,我需要该id上的金额总和,不包括标记“a”的金额。如图所示,我想要的输出在底部。我曾考虑过使用分区和EXISTS命令,但在概念化解决方案时遇到了问题。如果你们中的任何人能看一看并为我指出正确的方向,我们将不胜感激: 样本表: id mark amount ------------------ 1 A 1 2 A 3 2 B 2 3
id mark amount
------------------
1 A 1
2 A 3
2 B 2
3 A 2
4 A 1
4 B 3
5 A 1
5 C 3
6 A 2
6 C 2
期望输出:
id sum(amount)
-----------------
1 1
2 5
3 2
4 4
5 3
6 2
以下是我的努力:
select id, sum(amount) from table t where not t.id = 'A' group by id
having id in (select id from table t where mark = 'C')
union
select id, sum(amount) from table t where t.id group by id
having id not in (select id from table t where mark = 'C')
你的第二个总数应该是:sumcase当标记“A”时,那么amount else 0 end应该是amount而不是1。@AndriyM rush错误。固定的it@Adrian,谢谢你的回复。实施您的解决方案后,我意识到我问错了问题!此解决方案完全符合我的要求,但我要求的不是我需要的:。如果你有勇气再试一试的话,我已经问了一个新问题,我的实际需求是
select id, sum(amount) from table t where not t.id = 'A' group by id
having id in (select id from table t where mark = 'C')
union
select id, sum(amount) from table t where t.id group by id
having id not in (select id from table t where mark = 'C')
SELECT
id,
sum(amount) AS sum_amount
FROM atable t
WHERE mark <> 'A'
OR NOT EXISTS (
SELECT *
FROM atable
WHERE id = t.id
AND mark = 'C'
)
GROUP BY
id
;