加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

oracle – 怎样通过不区分巨细写的ASC或DESC,行使DISTINCT和UNIO

发布时间:2021-01-12 07:11:19 所属栏目:站长百科 来源:网络整理
导读:怎样通过不区分巨细写的ASC或DESC为P / L sql 11g订购.这个p / l sql根基题目,但我在谷歌找不到好的谜底,请汇报我怎样排序选择功效不区分巨细写 这是我试过的 SELECT DISTINCT asssss,saas_acc FROM DUAL UNION SELECT '--ALL--','ALL' FROM DUAL ORDER BY u

怎样通过不区分巨细写的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错误地打消此查询!

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读