![](/img/trans.png)
[英]How can I return date and count of records for that date using spring data 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.