oracle – 如何通过不区分大小写的ASC或DESC,使用DISTINCT和UNIO
如何通过不区分大小写的ASC或DESC为P / L sql 11g订购.这个p / l sql基本问题,但我在谷歌找不到好的答案,请告诉我如何排序选择结果不区分大小写 这是我试过的 SELECT DISTINCT asssss,saas_acc FROM DUAL UNION SELECT '--ALL--','ALL' FROM DUAL ORDER BY upper(asssss) ASC ; 给我的ORA-01785:ORDER BY项必须是SELECT列表表达式的编号 解决方法DISTINCT实际上使用SELECT子句中给出的任何表达式过滤了结果集中的UNIQUE内容.我们不能使用不同的表达式或列名来订购它.请看这里的例子. SQL> l 1 SELECT DISTINCT (col1),(col2) 2 FROM 3 ( SELECT 'Hello' col1,'World' col2 FROM DUAL 4 UNION ALL 5 SELECT 'HELLO','WORLD' FROM DUAL 6* ) SQL> / COL1 COL2 ----- ----- HELLO WORLD Hello World 你可以在这里看到DISTINCT是CASE SENSITIVE.(显示2行) 所以,让我在两个列上做一个UPPER(). SQL> l 1 SELECT DISTINCT UPPER (col1),UPPER(col2) 2 FROM 3 ( SELECT 'Hello' col1,'WORLD' FROM DUAL 6* ) SQL> / UPPER UPPER ----- ----- HELLO WORLD 只显示1行,忽略大小写. 回到实际问题.要在DISTINCT结果集上订购某些内容,它必须是DISTINCT子句的表达式/列的一部分. 因此,当您发出DISTINCT COL1,COl2时,order by可能是COL1或COL2 / ..它不能是COL3甚至是UPPER(COL1),因为UPPER()使表达式与DISTINCT上的表达式相冲突. 最后,回答你的问题 如果你想让你的ORDER不区分大小写,那么DISTINCT也必须采用相同的方式!如下所示 SELECT DISTINCT UPPER(asssss),saas_acc FROM DUAL ORDER BY upper(asssss) ASC ; 或者如果必须使用UNION,最好这样做,或者与上面的相同. SELECT * FROM ( SELECT DISTINCT asssss as asssss,saas_acc FROM DUAL UNION SELECT '--ALL--','ALL' FROM DUAL ) ORDER BY upper(asssss) ASC ; 根据我自己的经验,我一直觉得,在ORDER BY中指定了表达式/列,它也被隐式地带到最终的SELECT中.排序实际上只是基于结果中的列号(位置).在这种情况下,DISTINCT COL1,COl2已经存在.当你给ORDER BY UPPER(COL1)时,它会尝试附加到SELECT表达式中,这根本不可能.因此,语义检查本身会使用Error错误地取消此查询! (编辑:海南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |