2017-01-19 12 views
1

こんにちは私はいくつかの規則で発行されたレポートを持っていますが、レポート値がnullの場合のアカウントの初期値を持っています。 私は学校、年、日付のために発生する新しい変数Accts_Nを作成したいと思います。日付がnullの場合、その日付のAccts値とAccts値の合計です。 したがって、下記のサンプル表を使用して、School A Year 2017のAccts_N値は2016-01-10で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 WHENのいくつかの異なるインスタンスを試しましたが、それは正しいアプローチではないと思います。誰かが私の方向性を示唆することができますか? ありがとうございます

答えて

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; 
関連する問題