2013-04-24 53 views
4

我有一个包含2个日期列的表,分别表示创建和关闭JIRA项目。对于报告,我需要获取每个日期和累积的已创建和已关闭项目的数量。无效值的外部连接表的累积总和

但是在某些日期没有项目创建或关闭,因此完整的外部联接返回空值。这会导致Im无法修正的累积和列中的空值。

我已经尝试了很多不同的东西与coalesce'ing:

Select 
    coalesce(A.createdate, B.closedate) datum 
    ,COALESCE(A.created, 0) created 
    ,COALESCE(B.closed,0) closed 
    ,sum(created) OVER(ORDER BY A.createdate ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) cumSum 
    ,sum(coalesce(created,0)) OVER(ORDER BY A.createdate ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) cumSum2 
    ,COALESCE(sum(created) OVER(ORDER BY A.createdate ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),0) cumSum3 
    ,sum(coalesce(created,0)) OVER(ORDER BY A.createdate ROWS BETWEEN UNBOUNDED PRECEDING AND 1 preceding) + coalesce(created,0) cumSum4 
from 
(SELECT convert(date,[Created]) createdate, COUNT(*) created 
    FROM [jira].[dbo].[report_clean_full] 
    group by convert(date,[Created])) A 
full outer join (SELECT convert(date,Resolved) closedate, COUNT(*) closed 
    FROM [jira].[dbo].[report_clean_full] 
    where status = 'Closed' 
    group by convert(date,Resolved)) B 
on A.createdate = B.closedate 
order by 1 

结果

2012-08-17 1 0 1 1 1 1 
2012-08-23 1 0 2 2 2 2 
2012-08-30 4 0 6 6 6 6 
2012-09-03 1 0 7 7 7 7 
2012-09-06 25 0 32 32 32 32 
2012-09-07 30 3 62 62 62 62 
2012-09-10 11 6 73 73 73 73 
2012-09-11 6 1 79 79 79 79 
2012-09-13 1 0 80 80 80 80 
2012-09-14 10 1 90 90 90 90 
2012-09-17 7 1 97 97 97 97 
2012-09-18 4 2 101 101 101 101 
2012-09-19 4 2 105 105 105 105 
2012-09-20 19 5 124 124 124 124 
2012-09-21 12 0 136 136 136 136 
2012-09-24 7 1 143 143 143 143 
2012-09-26 0 7 NULL 0 0 0 
2012-09-27 18 2 161 161 161 161 
2012-09-28 7 0 168 168 168 168 
2012-10-01 4 1 172 172 172 172 
于2012-09-26

有唯一项目关闭了,但我想cumSum到显示143而不是0(并最终重复关闭项目和减去获得未清项目的编号)

任何人都可以解释什么我做错了吗?

+0

sql server 2012,但是当我发布的那一刻,突然间有一段清晰的时刻。 OVER()中的ORDER BY是问题所在,我现在使用coalesce(A.createdate,b.closedate),它起作用 – JJS 2013-04-24 08:43:08

回答

2

类似我到GPN的评论回应:

的解决方案是在过度凝聚订单的日期BY()。据我所知,问题不是价值本身,而是NULL范围。

sum(coalesce(created,0)) OVER(ORDER BY coalesce(A.createdate,b.closedate) ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) cumSumCreated