窗口中的空值计数

时间:2019-02-19 01:30:26

标签: sql oracle

我需要按ID获取空组的计数,但不包括月份和分组中的销售额

样本数据

 id     custname    reportdate   sales
 1        xx        31-JAN-17    1256
 1        xx        31-MAR-17    <null>
 1        xx        30-JUN-17    5678
 1        xx        31-DEC-17    <null>
 1        xx        31-JAN-18    1222
 1        xx        31-MAR-18    <null>
 1        xx        30-JUN-18    5667
 1        xx        31-DEC-18    7890
 2        yy        31-JAN-17    1223
 2        yy        31-APR-17    3435
 2        yy        30-JUN-17    <null>
 2        yy        31-DEC-17    4567
 2        yy        31-JAN-18    5678
 2        yy        31-APR-18    <null>
 2        yy        30-JUN-18    <null>
 2        yy        31-DEC-18    2345

我需要什么作为输出

 id     custname    reportdate   sales  count(Sales nulls)
 1        xx        31-JAN-17    1256     2
 1        xx        31-MAR-17    <null>   2
 1        xx        30-JUN-17    5678     2
 1        xx        31-DEC-17    <null>   2
 1        xx        31-JAN-18    1222     1
 1        xx        31-MAR-18    <null>   1
 1        xx        30-JUN-18    5667     1
 1        xx        31-DEC-18    7890     1
 2        yy        31-JAN-17    1223     1
 2        yy        31-APR-17    3435     1 
 2        yy        30-JUN-17    <null>   1 
 2        yy        31-DEC-17    9643     1
 2        yy        31-JAN-18    5678     2
 2        yy        31-APR-18    <null>   2
 2        yy        30-JUN-18    <null>   2
 2        yy        31-DEC-18    2345     2

您可以看到我有很多年,并且我需要在id和year NOT MONTH上进行分区

1 个答案:

答案 0 :(得分:2)

case窗口函数中使用count表达式。

select t.*,count(case when sales is null then 1 end) over(partition by id) as null_cnt_per_id
from tbl t