ORA-01791: 不是 SELECTed 表达式

当在SQL查询中使用DISTINCT关键字并尝试根据未在SELECT语句中选择的字段进行排序时,会出现ORA-01791错误。问题在于ORDER BY子句中的字段必须与SELECT中的字段匹配。解决方法是将排序字段添加到SELECT列表中,或者删除ORDER BY子句中的不匹配字段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景:

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


问题描述:

查询报错: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.BI
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值