2017-01-26 111 views
0

在Oracle SQL我有一個表,最後,像這樣的:的Oracle SQL一列數的情況下

-------------------- 
-- ID  -- TYPE 
-------------------- 
-- 123  -- A 
-- 123  -- A 
-- 123  -- B 
-- 123  -- B 
-- 123  -- C 
-- 124  -- B 
-- 124  -- B 
-- 124  -- C 
-- ...  -- ... 

,我希望像這樣的輸出:

---------------------------------------------------------------------------------- 
-- Count distinct IDs -- count (type A) -- count (type B) -- count (type C) 
-- 10000    -- 5000   -- 4000   -- 1000 
---------------------------------------------------------------------------------- 

我的一部分遇到麻煩的是,一旦一個ID被計入A型,它就不能是B或C.一旦它被計入B型,它就不能成爲C並且不可能成爲A.要成爲C,它必須被計入A或B.

到目前爲止,我有類似

select 
count(distinct FINAL.ID) 
from 
FINAL 

A,B和C是唯一可能的值。

+0

A,B和C是唯一可能的值嗎?如果還有其他值可能,你只需要計算A,B和C? (如果**這兩個**問題的答案都是**否**,那麼沒有動態SQL,您可能無法實現所需內容)。 – mathguy

+0

A,B和C是唯一可能的值。 –

回答

1

像這樣可能工作:

select count(*) as ct_id, 
     count(case type when 'A' then 1 end) as ct_a, 
     count(case type when 'B' then 1 end) as ct_b, 
     count(case type when 'C' then 1 end) as ct_c 
from (
     select id, min(type) as type 
     from  final 
     group by id 
    ) 
; 

子查詢採用的「明顯的」治療(因爲它產生爲每個不同的id單個行),它只是選擇每個id「最小」 type 。外部查詢執行總計數和條件計數。

+0

它的工作原理!非常感謝數學! –