我在Oracle中有一个带有空日期的问题
我有这样一张桌子:
ID DATE
1 '02/08/2015'
1 NULL
1 '02/06/2014'
2 NULL
2 '06/02/2013'
这只是真实表格的一个例子。现在我需要的是这样的事情:
ID DAY_INAC
1 1
2 1
我的意思是,我只需要计算DATE列中的空值。
但是当我执行我的查询时
Select id, count(date)
from table
where date is null
group by Id
having count(date)>0
结果我什么也没得到。我需要使用日期值来生成相应的计数。
此致
答案 0 :(得分:4)
由于您的查询已经按date is null
进行过滤,因此您只需使用count(*)
Select id, count(*)
from table
where date is null
group by Id
having count(*) > 0
答案 1 :(得分:2)
COUNT
不会计算NULL
个值。您可以使用CASE
进行更改:
Select id, count(CASE WHEN date IS NULL THEN 1 END) AS DAY_INAC
from table
where date is null
group by Id;
的 LiveDemo
强>
请不要将列命名为数据类型。否则你可能需要引用它们。
答案 2 :(得分:1)
更精简的查询:
Select id, count(nvl2(date_column,null, sysdate)) as cnt
from table
group by Id;
答案 3 :(得分:1)
COUNT
不会计算NULL
个值 - 而是让它计算1
行的字面值(即NULL
):
Oracle 11g R2架构设置:
CREATE TABLE table_name ( ID, "DATE" ) AS
SELECT 1, DATE '2015-08-02' FROM DUAL
UNION ALL SELECT 1, NULL FROM DUAL
UNION ALL SELECT 1, DATE '2014-06-02' FROM DUAL
UNION ALL SELECT 2, NULL FROM DUAL
UNION ALL SELECT 2, DATE '2013-02-06' FROM DUAL
查询1 :
SELECT id,
COUNT(1)
FROM table_name
WHERE "DATE" IS NULL
GROUP BY id
<强> Results 强>:
| ID | COUNT(1) |
|----|----------|
| 1 | 1 |
| 2 | 1 |