2017-02-21 2 views
1

Betrachten basierend Spalte zuweisen, die ich habe:Oracle - die folgenden in einer Auswahlabfrage Zählwert für eine auf einer anderen Spalte in Auswahlabfrage

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

sollte ich eine neue Spalte Zählung im selben wählen werden, indem welche die Anzahl der 'Y'-Datensätze für die ID zählt und sie allen zuweist. (ZB: ID = 5 hat 3 Datensätze. Allen sollte der Zählwert als '2' zugewiesen werden).

Ausgabe in Auswahlabfrage erforderlich:

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

Was bedeutet "ID Flag 5 Y 5 Y 5 N 6 Y 6 Y 6 Y 6 N"? – Rene

+1

Es tut mir leid. ID und Flag sind zwei Spalten. Sie wurden als einzelner Datensatz transponiert. – Harish

Antwort

3

eine Fensterfunktion verwenden:

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

Der case Ausdruck für Fahnen mit N null zurück, und so werden sie durch die Zählung ignoriert werden() Funktion

+0

Noch besser, verwenden Sie einen anderen Namen für die "count" Spalte - ein Name, der kein Oracle (und SQL) Schlüsselwort ist. Verwenden Sie allgemein Namen, die nicht in Anführungszeichen definiert werden müssen. In diesem Fall sind sowohl "ct" als auch "cnt" ziemlich üblich. – mathguy

+0

Vielen Dank Mann! Was für eine saubere Lösung :) – Harish

Verwandte Themen