2017-01-19 94 views
1

嗨我已經發布了具有一定規律性的報告,但報告值爲空時它們具有初始帳戶值。 我想爲學校,年份和日期創建一個新變量Accts_N,它是該日期的Accts值和日期爲空時的Accts值的總和。 因此,使用下面的示例表格,2017學校A 2016-01-10的Accts_N值爲8,2016-02-10的值爲12。SQL按日期將多個按日期計算的值彙總爲新值

School | Year | Accts | ReportDate 
-------|------|-------|----------- 
A  | 2017 | 2  | null 
A  | 2017 | 6  | 2016-01-10 
A  | 2017 | 10 | 2016-02-10 
A  | 2018 | 0  | 2016-01-10 
A  | 2018 | 4  | 2016-02-10 
B  | 2017 | 9  | null 
B  | 2018 | 3  | 2016-2-10 

我已經嘗試過幾種不同的SUM CASE實例,但我不認爲這是正確的做法。有人可以爲我提出一個方向嗎? 謝謝

回答

0

這個怎麼樣?

declare @t table(School nvarchar(50), Year datetime, Accts int, ReportDate datetime) 

    insert into @t 
    values 
     ('A','2017',2,null), 
     ('A','2017',6,'2016-01-10'), 
     ('A','2017',10,'2016-02-10'), 
     ('A','2018',0,'2016-01-10'), 
     ('A','2018',4,'2016-02-10'), 
     ('B','2017',9,null), 
     ('B','2018',3,'2016-01-10') 

    select t.School, t.Year, t.ReportDate, t.Accts + ISNULL(tNulls.SumAcctsWhenNull,0) 
    from @t t 
     outer apply (select t2.School, t2.Year, SUM(Accts) AS SumAcctsWhenNull 
        from @t t2 
        where 
         t2.ReportDate IS NULL AND 
         t2.School = t.School AND 
         t2.Year = t.Year 
        group by t2.School, t2.Year) tNulls 
    where 
     t.ReportDate IS NOT NULL 
1

如果你想添加一個新列,那麼相關子查詢想到:

select r.*, 
     (select sum(r2.accts) 
     from reports r2 
     where r2.school = r.school and 
       r2.year = r.year and 
       (r2.reportdate = r.reportdate or r2.reportdate is null) 
    ) as accts_n 
from reports r;