2017-04-10 31 views
0

特定のジャーナルのクラスエントリに関するデータを保持するテーブルがあります。週ごとに結果を分けようとしているので、毎週その件数を集計しています。しかし、私が1日にグループ化するとき、私はヌル値も受け取ります。 Null値を持つレコードを省略したい。それ、どうやったら出来るの?SQL Server 2014 - Nullレコードを削除する方法

私は、次のコードを書いた:

SELECT Year(JournalDate) AS YY 
     ,Month(JournalDate) AS MM 
     ,FromClass 
     ,ToClass 
     ,(SELECT Count(JournalID) 
     WHERE Day(JournalDate) >= 1 AND Day(JournalDate)=7) AS CountWeek1 
     ,(SELECT Count(JournalID) 
     WHERE Day(JournalDate) >= 8 AND Day(JournalDate)=14) AS CountWeek2 
     ,(SELECT Count(JournalID) 
     WHERE Day(JournalDate) >= 15 AND Day(JournalDate)=21) AS CountWeek3 
     ,(SELECT Count(JournalID) 
     WHERE Day(JournalDate) >= 22 AND Day(JournalDate)=28) AS CountWeek4 
     ,(SELECT Count(JournalID) 
     WHERE Day(JournalDate) >= 29 AND Day(JournalDate)=31) AS CountWeek5 


    FROM [tblJournal] 

    WHERE [JournalDate] >= '2016-09-01 00:00:00.000' 
    AND FromClass <> ToClass 
    --AND CountWeek1 IS NOT Null 

    GROUP BY Year(JournalDate), Month(JournalDate), Day(JournalDate), FromClass, ToClass 

    ORDER BY YY, MM, FromClass, ToClass 

をしかし、私は、あまりにもNULL値を取得します。ヌル値を削除したい

YY MM FrClass ToClass CntWk1 CntWk2 CntWk3 CntWk4 CntWk5 
2016 9 1 2 NULL NULL NULL NULL NULL 
2016 9 1 2 NULL NULL NULL NULL NULL 
2016 9 1 2 NULL NULL NULL NULL NULL 
2016 9 1 2 NULL NULL NULL NULL NULL 
2016 9 1 2 NULL 20  NULL NULL NULL 
2016 9 1 2 NULL NULL NULL NULL NULL 
2016 9 1 2 NULL NULL NULL NULL NULL 
2016 9 1 2 NULL NULL NULL NULL NULL 
2016 9 1 2 NULL NULL NULL NULL NULL 
2016 9 1 2 NULL NULL NULL NULL NULL 
2016 9 1 2 NULL NULL NULL NULL NULL 
2016 9 1 2 12  NULL NULL NULL NULL 
2016 9 1 2 NULL NULL NULL NULL NULL 
2016 9 1 2 NULL NULL NULL NULL NULL 
2016 9 1 2 NULL NULL NULL NULL NULL 
2016 9 1 2 NULL NULL NULL NULL NULL 
2016 9 1 2 NULL NULL 29  NULL NULL 
2016 9 1 2 NULL NULL NULL NULL NULL 
2016 9 1 2 NULL NULL NULL NULL NULL 
2016 9 1 2 NULL NULL NULL 25  NULL 

NULL値を持つレコードを削除するにはどうすればよいですか?

EDIT:
だから私は実際に私の結果のように、このように見えるようになります:

YY MM FrmCls ToClsWk1 Wk2 Wk3 Wk4 Wk5 
2016 9 1 2 12 20 29 25 0 
2016 9 1 3 2 1 6 0 0 
2016 9 1 4 0 1 2 0 0 
2016 9 2 1 0 3 0 2 0 
2016 9 2 3 74 46 84 54 0 
2016 9 2 4 0 0 8 5 0 
2016 9 3 2 0 813 0 0 0 
+0

null値空白に? – maSTAShuFu

+0

か、Cntwk1 - wk5のNULLを含むすべての行が含まれていませんか? – maSTAShuFu

+0

質問:最後の列を除くすべての値に1つの行が必要ですか?または、4つの行(少なくとも1つの非NULL列を持つ各行に1つの行)が必要ですか? – pmbAustin

答えて

1

は、上記のデータを取り、一時テーブルに挿入します。その後、あなたは次のようになど、年、月、によってデータをsumingして、結果を照会することができます

SELECT YY, MM, FrClass,ToClass,SUM(cntwk1),SUM(cntwk2),SUM(cntwk3),SUM(cntwk4),SUM(cntwk5) 
FROM #data 
GROUP BY YY, MM, FrClass,ToClass 
+0

ありがとうございます。コード内でそのステートメントをどのように使用しますか? group by statementの後に – user1777929

+0

@ user1777929 – Stephanie

+0

それは4thw eekが値を持つレコードを私に与えるだけなので、それはうまくいかないでしょう。その他の列はすべてNULLになります。 – user1777929

1

これはどう

select * from 
(
SELECT Year(JournalDate) AS YY 
     ,Month(JournalDate) AS MM 
     ,FromClass 
     ,ToClass 
     ,isnull((SELECT Count(JournalID) 
     WHERE Day(JournalDate) >= 1 AND Day(JournalDate)=7),0) AS CountWeek1 
     ,isnull((SELECT Count(JournalID) 
     WHERE Day(JournalDate) >= 8 AND Day(JournalDate)=14),0) AS CountWeek2 
     ,isnull((SELECT Count(JournalID) 
     WHERE Day(JournalDate) >= 15 AND Day(JournalDate)=21),0) AS CountWeek3 
     ,isnull((SELECT Count(JournalID) 
     WHERE Day(JournalDate) >= 22 AND Day(JournalDate)=28),0) AS CountWeek4 
     ,isnull((SELECT Count(JournalID) 
     WHERE Day(JournalDate) >= 29 AND Day(JournalDate)=31),0) AS CountWeek5 


    FROM [tblJournal] 

    WHERE [JournalDate] >= '2016-09-01 00:00:00.000' 
    AND FromClass <> ToClass 

    GROUP BY Year(JournalDate), Month(JournalDate), Day(JournalDate), FromClass, ToClass 
) x 
    where CountWeek1 +CountWeek2+CountWeek3+CountWeek4+CountWeek5 <> 0 

    ORDER BY YY, MM, FromClass, ToClass 
+0

ありがとうございます。それはうまくいった。しかし、それらをさらにグループ化する方法はありますか?例えば;現在、私は1列の数値を取得し、他の列は0です。その前の行の以前の0だった1つの列を持つ別の行(同じグループの場合) – user1777929

関連する問題