2017-02-21 13 views
1

考慮,我有一個選擇查詢以下的列:甲骨文 - 分配計數值的基礎上選擇查詢另一列

ID Flag 
5  Y 
5  Y 
5  N 
6  Y 
6  Y 
6  Y 
6  N 

我應該以同樣的選擇來添加新列計數其中對該ID的'Y'記錄的數目進行計數並將其分配給全部。 (例如:ID = 5有3條記錄,所有這些記錄應該被賦予計數值'2')。

ID Flag count 
5  Y  2 
5  Y  2 
5  N  2 
6  Y  3 
6  Y  3 
6  Y  3 
6  N  3 
+0

「ID標誌5 Y 5 Y 5 N 6 Y 6 Y 6 Y 6 N」是什麼意思? – Rene

+1

對不起。 ID和Flag是兩列..它們被轉換爲單個記錄。 – Harish

回答

3

使用窗函數:在選擇查詢所需

輸出

select id, 
     flag, 
     count(case when flag = 'Y' then 1 end) over (partition by id) as "count" 
from the_table 
order by id; 

case表達式將返回null與N標誌,因此它們將被計數被忽略()功能

+0

更好的是,對「count」列使用不同的名稱 - 一個不是Oracle(和SQL)關鍵字的名稱。更一般地說,使用不需要用雙引號定義的名稱。在這種情況下,'ct'和'cnt'都很常見。 – mathguy

+0

非常感謝!多麼好的解決方案:) – Harish