SQL Server 2014 - 如何删除空记录

时间:2017-04-10 21:43:22

标签: sql sql-server

我有一个表,其中包含有关某个日记的类条目的数据。我试图按周分开结果,因此我每周都会计算这些条目。但是当我按天分组时,我也得到空值。我想省略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值的记录?

修改
所以我真的希望我的结果看起来像这样:

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

2 个答案:

答案 0 :(得分:1)

获取上面的数据并插入临时表。之后,您可以通过按年,月等对数据进行求和来查询结果:

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

答案 1 :(得分: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