如何通过不区分大小写的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 item must be the number of a SELECT-list expression
答案 0 :(得分:1)
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' col2 FROM DUAL
4 UNION ALL
5 SELECT 'HELLO','WORLD' FROM DUAL
6* )
SQL> /
UPPER UPPER
----- -----
HELLO WORLD
只显示1行,忽略大小写。
回到实际问题。要在DISTINCT
Resultset上订购某些内容,它必须是DISTINCT
子句的表达式/列的一部分。
因此,当您发出DISTINCT COL1,COl2
时,订单可能是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
中指定的表达式/列是什么,隐式地被带到最终{ {1}}也是。排序实际上只是基于结果中的列号(位置)。在这种情况下,SELECT
已经存在。当您提供DISTINCT COL1,COl2
时,系统会尝试将其附加到ORDER BY UPPER(COL1)
表达式中,该表达式可能SELECT
。因此, Semantic 检查自身,取消此查询错误!
答案 1 :(得分:0)
答案 2 :(得分:0)
您可以使用upper
或lower
个功能。
order by upper(columnName)
<强> UPDATE1 强>
尝试从查询中删除order-by
子句,这将为您提供正确的错误,即ORA-00904: "SAAS_ACC": invalid identifier
。因此,您可以在google
上搜索此错误,或在SO上提出其他问题。
答案 3 :(得分:0)
最简单的选择是按上(或下)案例列数据
进行排序ORDER BY UPPER( column_name )