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错误地打消此查询! (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |