ORA-01791: 不是 SELECTed 表达式

场景:

场景:查询表单数据中的申请人的职级,并将申请人和职级去重,且按照单据日期排序


问题描述:

查询报错:ORA-01791: 不是 SELECTed 表达式
代码:

SELECT DISTINCT A.STAFF 申请人,
  S.STDNAME 申请人名称,
  ra.STDCODE 申请人职级代码,
  ra.STDNAME 申请人职级,
  A.EXECUTIVE 代理高管,
  g.stdname 高管名称,
  sg.rank 高管职级,
  r.STDCODE 高管职级代码,
  r.STDNAME 高管职级名称,
  A.BILLCODE 单据编号,
  --  A.BILLTIME  单据日期,
  A.UNITID
FROM FO_ACCOUNTBILL A--报销单
LEFT JOIN MD_STAFF S--职员
ON A.STAFF=S.RECID
LEFT JOIN SJ_RANK ra--职级
ON S.RANK=ra.RECID
LEFT JOIN SJ_AGENTEXECUTIVE g--高管配置表
ON A.EXECUTIVE=g.RECID
LEFT JOIN MD_STAFF Sg--高管
ON g.EXECUTIVE=Sg.RECID
LEFT JOIN SJ_RANK r--高管职级
ON Sg.RANK=r.RECID
WHERE A.billcode LIKE 'SR%'
AND TO_CHAR(A.BILLTIME,'yyyymm')>'201812'
AND A.EXECUTIVE                IS NULL
ORDER BY A.staff,A.BILLTIME DESC;

ORA-01791: 不是 SELECTed 表达式
01791. 00000 -  "not a SELECTed expression"
*Cause:    
*Action:
行 1 列 607 出错


原因分析:

问题的分析:
SELECT语句中含有DISTINCT关键字或者有运算符时,排序用字段必须与SELECT语句中的字段相对应。在SELECT中未出现的列名也可用于ORDER BY 子句中,只要TABLE中有就行。但如果SELECT子句中出现了DISTINCT关键字,则只能用出现过的列名,而且如果SELECT子句中使用了任何运算符,在ORDER BY 子句中必须保持和SELECT子句中表达式完全一致,否则出现错误:“ORA-01791: 不是 SELECTed 表达式”。


解决方案:

解决方案:
将排序字段加入查询字段中,或者将排序字段去掉。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值