oracle order by和 distinct并存报错“ORA-01791: 不是 SELECTed 表达式”

在项目脚本中会经常使用distinct来去除,当去重一不小心遇上order by是就会产生ora-01791错误


       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 字段中,加上就好了


       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
         

 

转载于:https://my.oschina.net/u/1380237/blog/777343

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值