Ora-01791 不是Selected表达式”错误

偶写一个销售查询的功能模块,但在测试的时候按 条码/编码/库房 条件排序的时候都没有错误,只要按日期查的时候就会有“Ora-01791 不是Selected表达式”的错误信息,于是查看我的SQL语句,语句如下:
select  distinct GoodsId,Barcode,DepotId,GoodsName from sa_sale where depotid='11' order by selldate
这句话执行的时候就有错误 ,但把排序换成 order by  Goodsid 或其它 Barcode,DepotId,GoodsName的时候均没有错误,到此可能大家都想到了,因为 selldate不在查询结果字段中,而且这个语句是distinct语句。所以会出现这个错误
下边给出正确的解决办法:
Select  GoodsId,Barcode,DepotId,GoodsName from
(Select  distinct  GoodsId,Barcode,DepotId,GoodsName,SellDate  from sa_sale  where depotid='11' )
  order by selldate
 
 
查到关于这个ora错误的解释:
如果在ORDER  BY中指定多个列,结果将先按照子句中的第一个列排序,然后第二个,依此类推
在SELECT中未出现的列名也可用于ORDER BY 子句中,主要TABLE中有就行,但如果SELECT子句中出现了DISTINCT关键字,则只能用出现过的列名,而且如果SELECT子句中使用了任何运算符,在ORDER BY 子句中必须保持和SELECT子句中表达式完全一致,否则出现ORA-01791 ERROR

你可能感兴趣的:(职场,表达式,selected,休闲)