2017-02-21 30 views
1

Рассмотрим, у меня есть следующие в запросе выборки:Oracle - Присвоить значение счетчика для столбца на основе другого столбца в запросе на выборку

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

следует добавлять новый столбец количество в том же выбрать который подсчитывает номер «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

Прошу прощения. Идентификатор и флаг - это два столбца .. Они были транспонированы как одна запись. – 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 и, таким образом, они будут игнорироваться графа() функция

+0

Еще лучше, используйте другое имя для столбца «count» - имя, которое не является ключевым словом Oracle (и SQL). В более общем плане, используйте имена, которые не нужно определять в двойных кавычках. В этом случае как 'ct', так и' cnt' довольно распространены. – mathguy

+0

Спасибо большое! Какое аккуратное решение :) – Harish