代码之家  ›  专栏  ›  技术社区  ›  Akhilesh

ORACLE-意外令牌:(第1行第95列附近)

  •  0
  • Akhilesh  · 技术社区  · 8 年前

    下面是我的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();
    

    1 回复  |  直到 8 年前
        1
  •  0
  •   Akhilesh    8 年前
    StringBuffer buffer = new StringBuffer();
            buffer.append(" select  cec.OVRL_MET_ST as Status ,to_date(months.month, 'mon-yy') as MONTH_TXT ,  ");
            buffer.append(" coalesce(count(cec.SRL_NO_TXT), 0) as Count from  ");
            buffer.append(
                    " (select to_char( trunc(sysdate-3) - numtoyminterval(level - 1, 'month'), 'mon-yy') as month from dual connect by level <= 12) months ");
            buffer.append(" LEFT outer join CSL_ENHANCE_CHANGES cec on ");
            buffer.append("  to_char(months.month) = to_char( trunc(MNTH_TXT), 'mon-yy') ");
            buffer.append("  group by months.month,cec.OVRL_MET_ST ");
            query = buffer.toString();
    
            Class.forName("oracle.jdbc.driver.OracleDriver");
    
            PreparedStatement preparedStatement = dbConnection.prepareStatement(query);
            ResultSet reset = preparedStatement.executeQuery();