2017-02-21 35 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