2013-02-12 66 views
3

我有一个表,看起来像这样下2列:的Oracle SQL查询 - >计数2个不同的条件

YEAR  RESOLUTION_DATE  CREATION_DATE 

2013        2013/02/18 
2012        2012/05/26 
2009        2009/11/11 
2013   2013/12/08   2013/12/01 
2000        2000/17/31 
2007        2007/12/08 
2012        2012/12/08 
2012   2012/03/23   2012/03/10 
2012        2012/12/08 
2007        2007/01/17 
2012   2012/01/17   2012/01/10 
2009        2009/02/14 

我试图做一个查询,输出以下将:

YEAR  COUNT_RESOLUTION_DATE  COUNT_CREATION_DATE 
2000    0       1 
2007    0       2 
2009    0       2 
2011    0       0 
2012    2       5 
2013    1       2 

需要说明的是,我想查询按年来算RESOLUTION_DATE的数量,WH在RESOLUTION_DATE不为NULL的情况下,我想统计所有CREATION_DATE的值。 SQL是Oracle数据库所必需的。

+0

为什么是2000年'count_creation_date' 0?它不应该是1,因为有一个2000年的“年份”(和2008年的“creation_date” - 这看起来很奇怪,但我不明白为什么你不会计算它)?为什么2011年的'count_creation_date' 23?我只看到1行与2011年的“年份”(并且某种程度上具有2007年的“creation_date”)。 – 2013-02-12 21:59:56

+0

您在2000年的月份无效 – ajmalmhd04 2013-02-13 02:07:05

+0

我初始创建了虚拟数字。我现在更新了它们......现在它们应该有意义。我很抱歉。 – JT2013 2013-02-13 13:46:00

回答

3

如果只想非NULL分辨率日期计算,这应该工作:

SELECT 
SUM(CASE WHEN RESOLUTION_DATE IS NULL THEN 0 ELSE 1 END) AS COUNT_RESOLUTION_DATE, 
COUNT(CREATION_DATE) AS COUNT_CREATION_DATE 
FROM MyTable 
GROUP BY YEAR 
ORDER BY YEAR; 
+0

工作就像一个魅力!我意识到COUNT会一直跳过空值...真棒肯! – JT2013 2013-02-13 15:03:07

3

试试这个:

SELECT 
COUNT(RESOLUTION_DATE) AS COUNT_RESOLUTION_DATE, 
COUNT(CREATION_DATE) AS COUNT_CREATION_DATE 
FROM MyTable 
GROUP BY YEAR 
ORDER BY YEAR 
+0

嗨,但我只想计算resolution_date它不是null。我想统计所有creation_date的。 – JT2013 2013-02-13 13:41:54

+2

'count'跳过空值。 – Xophmeister 2013-02-13 14:07:21