2

以下の表の例では、ID 内にマーク「C」が存在しないすべてのマークについて、ID に対する金額を合計する方法を見つけようとしています。マーク「C」がIDに存在する場合、マーク「A」に対する金額を除いて、そのIDを超える金額の合計が必要です。例として、私の目的の出力は一番下にあります。パーティションと 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
4

3 に答える 3

0

これが私の努力です:

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')
于 2012-10-31T22:02:21.460 に答える
0
select 
  id, 
  case 
     when count(case mark when 'C' then 1 else null end) = 0 
     then 
        sum(amount)
     else 
        sum(case when mark <> 'A' then amount else 0 end)
  end
from sampletable
group by id
于 2012-10-31T21:56:07.563 に答える
0
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
;
于 2012-10-31T22:12:20.477 に答える