繁体   English   中英

如果数据库(oracle)中没有记录与使用 spring jpa 的日期列结合使用,如何将零显示为计数?

[英]How to display zero as count if there is no record in data base(oracle) in combination with Date column using spring jpa?

我想在当天按小时查询表中列值的事务计数,因为我想在图表中显示这些计数。

即使在没有记录的情况下,我也无法显示结果,在这种情况下我应该打印 0 个计数,我尝试过

with tmpTable as 
(
    select 
        (minHourSeq + level-1) hourSeq 
    from 
        (select 
             min(extract (hour from TXN_DATE_TIME)) minHourSeq, 
             max(extract (hour from TXN_DATE_TIME)) maxHourSeq 
         from 
             TRANSACTION_REQUEST) v 
    connect by 
        (minHourSeq + level-1) <= maxHourSeq
)
select 
    a.hourSeq as hour, nvl(count(b.transaction), 0) as count 
from 
    TRANSACTION_REQUEST b, tmpTable a 
where 
    a.hourSeq = extract(hour from b.TXN_DATE_TIME(+)) 
group by 
    a.hourSeq 
order by 
    1;

当我在 Oracle SQL 开发人员中执行它时它正在工作,但我收到一个错误

ORA-00907: 缺少右括号

在尝试用我的代码实现时

Query query = entityManager.createNativeQuery(
                "with tmpTable as (select (minHourSeq + level-1) hourSeq from (select min(extract (hour from txnDate)) minHourSeq, max(extract (hour from txnDate)) maxHourSeq from "
                        + TransactionRequest.class.getName()
                        + " ) v connect by (minHourSeq + level-1) <= maxHourSeq) "
                        + "select a.hourSeq as hour,nvl(count(b.transaction),0) as count from "
                        + TransactionRequest.class.getName()
                        + " b,tmpTable a a.hourSeq = extract(hour from b.txnDate(+)) group by a.hourSeq order by 1"); 

“其他解决方案”可能是将 CTE 移动到内联视图中; 也许您使用的工具无法识别它。 像这样的东西:

  SELECT a.hourSeq AS hour, NVL (COUNT (b.transaction), 0) AS COUNT
    FROM TRANSACTION_REQUEST b,
         -- WITH factoring clause moved into an inline view
         (    SELECT (minHourSeq + LEVEL - 1) hourSeq
                FROM (SELECT MIN (EXTRACT (HOUR FROM TXN_DATE_TIME)) minHourSeq,
                             MAX (EXTRACT (HOUR FROM TXN_DATE_TIME)) maxHourSeq
                        FROM TRANSACTION_REQUEST) v
          CONNECT BY (minHourSeq + LEVEL - 1) <= maxHourSeq) a
   WHERE a.hourSeq = EXTRACT (HOUR FROM b.TXN_DATE_TIME(+))
GROUP BY a.hourSeq
ORDER BY 1;

你错过了query的值where ,使用这个:

Query query = entityManager.createNativeQuery(
                "with tmpTable as (select (minHourSeq + level-1) hourSeq from (select min(extract (hour from txnDate)) minHourSeq, max(extract (hour from txnDate)) maxHourSeq from "
                        + TransactionRequest.class.getName()
                        + " ) v connect by (minHourSeq + level-1) <= maxHourSeq) "
                        + "select a.hourSeq as hour,nvl(count(b.transaction),0) as count from "
                        + TransactionRequest.class.getName()
                        + " b,tmpTable a where a.hourSeq = extract(hour from b.txnDate(+)) group by a.hourSeq order by 1"); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM