2014-04-17 48 views
0

下选择工作时CLOSE_DATEIS NOT NULL选择计数“空”和“非空”

SELECT 
    YEAR (CLOSE_DATE) AS TheYear, 
    MONTH (CLOSE_DATE) AS TheMonth, 
    COUNT (*) AS cnt 
FROM 
    Table1 
WHERE 
    Table1.DEPT = 'SUPPORT' 
GROUP BY 
    YEAR (CLOSE_DATE), 
    MONTH (CLOSE_DATE) 
ORDER BY 
    TheYear DESC, 
    TheMonth DESC 

输出是:

+-------------+------+ 
| Year | Month | cnt | 
+-------------+------+ 
| 2014 |  4 | 10 | 
| 2014 |  3 | 9 | 
| 2014 |  2 | 15 | 
| 2014 |  1 | 12 | 
| 2013 | 12 | 10 | 
| 2013 | 11 | 50 | 
+--------------+-----+ 

如果CLOSE_DATE有,例如,7行NULL,结果将为:

+-------------+------+ 
| Year | Month | cnt | 
+-------------+------+ 
| NULL | NULL | 7 | 
| 2014 |  4 | 10 | 
| 2014 |  3 | 9 | 
| 2014 |  2 | 15 | 
| 2014 |  1 | 12 | 
| 2013 | 12 | 10 | 
| 2013 | 11 | 50 | 
+--------------+-----+ 

NULL表明它应该算的实际年份和月份,所以预期的结果应该是:

+-------------+------+ 
| Year | Month | cnt | 
+-------------+------+ 
| 2014 |  4 | 17 | 
| 2014 |  3 | 9 | 
| 2014 |  2 | 15 | 
| 2014 |  1 | 12 | 
| 2013 | 12 | 10 | 
| 2013 | 11 | 50 | 
+--------------+-----+ 

UPDATE

上面的例子只是一个更大的选择的一部分。我实际上计算了打开和关闭的情况。

如果票证没有close_date,则表示它已打开。所以,计数接近它应该算作公开。

的选择是一样的,用开柱:

SELECT 
    YEAR (OPEN_DATE) AS TheYear, 
    MONTH (OPEN_DATE) AS TheMonth, 
    COUNT (*) AS cnt 
FROM 
    Table1 
WHERE 
    Table1.DEPT = 'SUPPORT' 
GROUP BY 
    YEAR (OPEN_DATE), 
    MONTH (OPEN_DATE) 
ORDER BY 
    TheYear DESC, 
    TheMonth DESC 

所以行YEAR (OPEN_DATE) AS TheYear,MONTH (OPEN_DATE) AS TheMonth,带来的年份和月份从open_date列,但如果close_dateis null它应该算在该行太。

这样,所有在close_date中具有空值的行将被视为open_date

+0

你有你的朋友吗? – AK47

回答

1

您可以使用Isnull()函数,只要发生值null,此函数就允许使用另一个预定义值。

SELECT 
    YEAR (Isnull(CLOSE_DATE,getdate())) AS TheYear, 
    MONTH (Isnull(CLOSE_DATE,getdate())) AS TheMonth, 
    COUNT (*) AS cnt 
FROM 
    Table1 
WHERE 
    Table1.DEPT = 'SUPPORT' 
GROUP BY 
    YEAR (Isnull(CLOSE_DATE,getdate())), 
    MONTH (Isnull(CLOSE_DATE,getdate())) 
ORDER BY 
    TheYear DESC, 
    TheMonth DESC 
+0

AK47,谢谢你的回复。但我在这个例子中犯了一个错误,现在我才意识到它。我会更新帖子,希望你仍然可以提供帮助。 – Khrys

+0

应该是这样的:'CASE WHEN(Isnull(YEAR(OPEN_DATE))then Year(GETDATE())else YEAR(OPEN_DATE)END asYear'? – Khrys