以下内容无法正确计算窗口中的空值...
select *,
sum(case when value is null then 1 else 0 end)
over(partition by id
order by coalesce(value,9999999)) as NumNulls,
row_number()
over(partition by id
order by coalesce(value,9999999)) as RN
from temp
显然,使用rows between unbounded preceding and unbounded following
可以解决问题,所以这不是什么大问题。但是,鉴于我对SQL的理解,我不会期望这个结果。我是否错过了语言的细节,或者这是出乎意料的行为?
这是一个SQL小提琴:http://sqlfiddle.com/#!6/98285/3
答案 0 :(得分:0)
要达到预期效果,您需要
SELECT *
,SUM(CASE WHEN value IS NULL THEN 1 ELSE 0
END) OVER ( PARTITION BY id ORDER BY value ) AS NumNulls
,ROW_NUMBER() OVER ( PARTITION BY id ORDER BY value) AS RN
FROM #temp
因为您使用了coalesce
,因此无法正确分区,因此您的计数已关闭。