Sql 如果存在其他记录,则排除组中记录的值

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中不存在标记“C”的所有标记的id金额相加。当id中存在标记“C”时,我需要该id上的金额总和,不包括标记“a”的金额。如图所示,我想要的输出在底部。我曾考虑过使用分区和EXISTS命令,但在概念化解决方案时遇到了问题。如果你们中的任何人能看一看并为我指出正确的方向,我们将不胜感激:

样本表:

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
;