2017-04-10 150 views
0

我有一个表,其中包含有关某个日记的类条目的数据。我试图按周分开结果,所以我每周都会得到这些条目的数量。但是当我按天分组时,我也会得到空值。我想用Null值省略记录。我怎么做?SQL Server 2014 - 如何删除空记录

我写了下面的代码:

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 

但我得到空值了。我想删除空值。

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值的记录?

编辑:
所以我真的喜欢我的结果是这样的:

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

空值的空白? – maSTAShuFu

+0

或不包含Cntwk1中的所有行 - wk5? – maSTAShuFu

+0

问题:你想要一行,除了最后一列以外的所有值吗?或者你想要四行(每行至少有一个非空列)? – 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

谢谢,先生。我如何在代码中使用该声明? – user1777929

+0

@ user1777929在group by语句之后。 – Stephanie

+0

这不会工作,因为它只会给我第4周eek有价值的记录。所有其他列将为空。 – 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(对于同一组) – user1777929