2014-01-24 29 views
4

如何使用不區分大小寫的ASC或DESC爲P/L sql 11g進行排序。這個P/L SQL的基本問題,但在谷歌我不能找到很好的答案,請告訴如何選擇結果不區分大小寫如何使用不區分大小寫的ASC或DESC,使用DISTINCT和UNION

這是我試圖

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

您的查詢似乎沒有多大意義。 'UNION'已經做了'DISTINCT',所以兩者都沒有理由。您的最高查詢是選擇兩個不存在於'dual'中的列。 –

回答

0

您可以使用upperlower函數。

order by upper(columnName) 

UPDATE1

嘗試從您的查詢,這將給你正確的錯誤,這是ORA-00904: "SAAS_ACC": invalid identifier刪除order-by條款。所以你可以在google上搜索這個錯誤,或者在SO上提出另一個問題。您也可以查看how to use order by in union

0

最簡單的辦法是用大寫進行排序(或較低)的情況下的列數據

ORDER BY UPPER(column_name) 
+1

我試過這個,但給了我錯誤爲ORA-01785:ORDER BY項必須是SELECT列表表達式的編號 – Duleep

+0

@Depep請參閱我的答案的Update1。 – Bhushan

1

DISTINCT實際上過濾結果集中,與SELECT子句中給定的任何表達式唯一內容。

我們不能使用不同的表達式或列名進行排序。請看這裏的例子。

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 

你可以看到,DISTINCTCASE 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結果集上訂購某些內容,它必須是DISTINCT子句的表達式/列的一部分。

所以,當你發出DISTINCT COL1,COl2,順序由可通過COL1COL2/..它不能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表達式中,這個表達式可能是NOT。因此,語義檢查自己,將取消資格此查詢與錯誤

相關問題