2017-02-21 15 views
1

を考えてみましょ選択クエリ内の別の列に基づいて、列のカウント値を割り当て、私は選択クエリで、次のしている:私は同じ選択に新しい列を追加する必要がありますオラクル -

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

IDのの番号「」をカウントし、それをallに割り当てます。 (例: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とフラグは2つの列です.1つのレコードとして転置されました。 – 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式はNでフラグをnullを返しますので、彼らは(数によって無視されます機能

+0

「カウント」列には別の名前を使用してください。これはOracle(およびSQL)キーワードではありません。より一般的には、二重引用符で定義する必要のない名前を使用します。この場合、 'ct'と' cnt'の両方がかなり一般的です。 – mathguy

+0

ありがとうたくさんの男!どのようなすっきりしたソリューション:) – Harish