" ORA-00932:不一致的数据类型:期望的NUMBER得到 - "但为什么?

时间:2018-04-17 08:13:38

标签: sql oracle date common-table-expression recursive-query

我有一个包含2个日期时间列的表example1,这些列不一定具有所有日期(即可能不包括周末)。我想从一年前开始创建一系列日期,并从表example1获取日期时间,这两个列的每一天都会发生。

给出这样的数据:

col1        col2
01/01/2018  01/02/2018
01/02/2018  01/03/2018
01/03/2018  01/05/2018
01/03/2018  NULL

我想要的ouptput是:

OnDay      CCol1 CCol2
01/01/2018     1     0
01/02/2018     1     1
01/03/2018     2     1
01/04/2018     0     0
01/05/2018     0     1

这是我尝试的但是我觉得这很烦人的ORA-00932:

WITH all_days (Onday) AS (
    SELECT TRUNC(sysdate) OnDay FROM dual
    UNION ALL
    SELECT OnDay-1    FROM all_days
    WHERE Onday > TRUNC(sysdate-365,'Q')
)
SELECT 
    OnDay
    ,COUNT(CASE WHEN TRUNC(ex.col1)=OnDay THEN 1 END) CCol1
    ,COUNT(CASE WHEN TRUNC(ex.col2)=OnDay THEN 1 END) CCol2
FROM all_days ad
LEFT JOIN example1 ex ON TRUNC(ex.col1)=ad.OnDay OR TRUNC(ex.col2)=ad.OnDay
GROUP BY OnDay

有趣的是,递归CTE单独工作,但在使用LEFT JOIN运算符插入OR后,我得到的错误似乎来自SELECT OnDay-1

有什么想法吗?

修改 我正在使用: Oracle Database 12c企业版12.1.0.2.0版 - 64位生产

0 个答案:

没有答案