oracle order by和 distinct並存報錯「ORA-01791: 不是 SELECTed 表達式」

在項目腳本中會常用distinct來去除,當去重一不當心趕上order by是就會產生ora-01791錯誤sql

select
         distinct
         a.accountno,
           a.instpdofferid,
           a.offer_id,
           a.standfeeid,
           a.cust_no,
           a.custaccid,
           a.subscriberid,
           a.feecode,
           a.accstatus,
           a.price,
           a.discount,
           a.money,
           a.returns,
           to_char(a.starttime,'yyyy-MM-dd') as starttime,
           to_char(a.endtime,'yyyy-MM-dd') as endtime,
           to_char(a.createtime,'yyyy-MM-dd') as createtime,
           a.cyccount,
           a.invoprint,
           a.billprint,
           a.logno,
           a.pay_type,
           a.paymentmoney,
           b.offer_name,
           c.standfeename,
           d.feename,
           a.accstatus,
           f_getparamname(a.accstatus,'ACCOUNT_ACCSTATUS') as accStatusName,
           a.quantily,
           a.remark,
           i.invo_no
      from t_account            a,
           t_pdoffer            b,
           t_prfeestandard      c,
           t_feetype            d, 
           t_acinvoiceprintdetail h,
           T_ACINVOICEPRINTLOG  i
     where a.offer_id = b.offer_id(+)
       and a.standfeeid = c.standfeeid(+)
       and a.feecode = d.feecode(+)
         and a.accountno=h.accountno(+) 
         and h.invoprintid = i.invoprintid(+)
         and a.cust_no = '00152851'
         order by a.createtime desc,a.accountno

正確是order by的字段必定要存在在select 查詢字段,上面order by creatime沒有在select 字段中,加上就行了code

select
         distinct
         a.accountno,
           a.instpdofferid,
           a.offer_id,
           a.standfeeid,
           a.cust_no,
           a.custaccid,
           a.subscriberid,
           a.feecode,
           a.accstatus,
           a.price,
           a.discount,
           a.money,
           a.returns,
           to_char(a.starttime,'yyyy-MM-dd') as starttime,
           to_char(a.endtime,'yyyy-MM-dd') as endtime,
           to_char(a.createtime,'yyyy-MM-dd') as createtime,
           a.cyccount,
           a.invoprint,
           a.billprint,
           a.logno,
           a.pay_type,
           a.paymentmoney,
           b.offer_name,
           c.standfeename,
           d.feename,
           a.accstatus,
           f_getparamname(a.accstatus,'ACCOUNT_ACCSTATUS') as accStatusName,
           a.quantily,
           a.remark,
           i.invo_no,
           a.createtime 
      from t_account            a,
           t_pdoffer            b,
           t_prfeestandard      c,
           t_feetype            d, 
           t_acinvoiceprintdetail h,
           T_ACINVOICEPRINTLOG  i
     where a.offer_id = b.offer_id(+)
       and a.standfeeid = c.standfeeid(+)
       and a.feecode = d.feecode(+)
         and a.accountno=h.accountno(+) 
         and h.invoprintid = i.invoprintid(+)
         and a.cust_no = '00152851'
         order by a.createtime desc,a.accountno
相關文章
相關標籤/搜索