下面是我的Oracle SQL查询,根据数据库中的状态(列-“OVRL\u MET\u ST”作为通过或失败)查找过去12个月的计数,其中CSL\u ENHANCE\u CHANGES是Oracle DB中的一个表,列SRL\u NO\u TXT作为id(主键),MNTH\u TXT为日期数据类型(例如“01-APR-17”),OVRL\u MET\u ST(varchar数据类型)由状态组成(即“通过”或“失败”)
select months.month ,
cec.ovrlMetSt as Status ,
coalesce(count(cec.srlNoTxt), 0) as Count
from (select to_char( trunc(sysdate) - numtoyminterval(level - 1, 'month'), 'mon-yy') as month
from dual connect by level <= 12) months
LEFT outer join CSL_ENHANCE_CHANGES cec
on to_char(months.month) = to_char( trunc(mnthTxt), 'mon-yy')
group by months.month,cec.ovrlMetSt;
这是执行Oracle查询时的结果
Month Status Count
feb-17 Pass 1
dec-16 null 0
oct-17 null 0
may-17 Pass 1
jul-17 null 0
sep-17 null 0
aug-17 null 0
apr-17 Pass 2
jun-17 null 0
jan-17 Pass 1
nov-17 null 0
mar-17 Pass 1
apr-17 Fail 1
我在代码中使用hql查询,如下所示
@PersistenceContext
EntityManager em;
List<Object[]> namedlist= (List<Object[]>) em.createQuery(
"select months.month, cec.ovrlMetSt as Status , coalesce(count(cec.srlNoTxt), 0) as Count from (select to_char( trunc(sysdate) - numtoyminterval(level - 1, 'month'), 'mon-yy') as month from dual connect by level <= 12) months LEFT outer join CSL_ENHANCE_CHANGES cec on to_char(months.month) = to_char( trunc(mnthTxt), 'mon-yy') group by months.month,cec.ovrlMetSt"
).getResultList();