2013-05-12 111 views
1

我有以下的SQL代碼:我在哪裏把獨特的在我的代碼?

select upper(regexp_substr(street1, '\S+$')) 

,但我不知道我應該把不同的關鍵字在表中唯一值,因爲我打印出許多重複的值。


編輯 - 從下面的評論。

完整查詢(錯誤):

select distinct UPPER(REGEXP_SUBSTR(STREET1, '\S+$')) 
from HELENS_DATA 
order by REGEXP_SUBSTR(STREET1, '\S+$') asc 

錯誤消息:

ORA-01791:不是選擇的表達01791. 00000 - 「不是一個選擇的表達」 *原因:*操作:行錯誤:3欄:24

完整的查詢(作品):

select distinct UPPER(REGEXP_SUBSTR(STREET1, '\S+$')) 
from HELENS_DATA 
order by UPPER(REGEXP_SUBSTR(STREET1, '\S+$')) desc; 

請注意初始查詢試圖通過使用UPPer()函數將查詢值更改爲上限如何曾經錯誤地忽略了ORDER BY子句中的函數並且它不是'DISTINCT'的錯誤。

+0

請編輯您的答案,表示你已經嘗試過什麼,沒有工作,以及您在這些努力收到確切的錯誤。 – 2013-05-12 02:13:25

+0

請發佈您的**完整查詢**。 – 2013-05-12 02:21:59

+0

將'UPPER'放入'ORDER BY'中。 – 2013-05-12 02:41:04

回答

0

有趣的是,當你有UPPER函數時,DISTINCT失敗。您可以嘗試使用子查詢來繞過它:

SELECT DISTINCT Ending 
FROM (select upper(regexp_substr(street1, '\S+$')) Ending) A 

子查詢真的不應該是必要的,雖然,這應該工作過,如柱先生X建議。

SELECT DISTINCT upper(regexp_substr(street1, '\S+$')) 
+0

很酷的子查詢的作品,這對我來說也很奇怪,但感謝 – dhssa 2013-05-12 02:25:19

+0

@DilshatAbduwalli的幫助,很高興我能幫上忙。那麼+1和標記作爲答案如何? – 2013-05-12 15:43:18

1

distinct總是select之後:

select distinct upper... 
+0

我已經試過了,但是oracle已經給我提供了錯誤,說沒有SELECTed表達式 – dhssa 2013-05-12 01:44:27

+0

如果我把上面的函數關閉,但是我需要把這個值改爲大寫 – dhssa 2013-05-12 01:45:45

+1

@DilshatAbduwalli - 有趣。對不起,我不知道爲什麼'distinct'會因'upper'而失敗。 – 2013-05-12 02:06:25

0

你試過:

SELECT DISTINCT上(...)AS '字段名稱'

如果命名字段您正在執行此操作可能會工作,並允許您使用DISTINCT。

+0

'field alias'與手頭的問題有什麼關係? – 2013-05-12 02:17:02

0

敲定:

起初我已經運行在Oracle數據庫中的代碼,如下面的代碼

完整的查詢(錯誤):

select distinct UPPER(REGEXP_SUBSTR(STREET1, '\S+$')) 
from HELENS_DATA 
order by REGEXP_SUBSTR(STREET1, '\S+$') asc; 

而作爲一個結果,我收到以下錯誤信息:

ORA-01791: not a SELECTed expression 01791. 00000 - "not a SELECTed expression" 
*Cause: *Action: Error at Line: 3 Column: 24 

上面的答案幫助我找出了我忽略的錯誤,以下代碼是正常工作的完成的SQL查詢。

完整的查詢(作品):

select distinct UPPER(REGEXP_SUBSTR(STREET1, '\S+$')) 
from HELENS_DATA 
order by UPPER(REGEXP_SUBSTR(STREET1, '\S+$')) desc; 

請注意,初始查詢試圖通過使用UPPER()函數我都怎麼過的錯誤被忽略的功能在ORDER BY子句更改查詢值上這不是'DISTINCT'的錯。結論是無論SELECT子句具有什麼參數,其他潛在子句(例如,在哪裏,ORDER BY ...等也應該有相同的模式或相同的價值。

感謝大家。

0

您不必重複ORDER BY子句中的代碼。無論別名您在SELECT列表定義,可以在ORDER BY使用:

SELECT DISTINCT 
    UPPER(REGEXP_SUBSTR(street1, '\S+$')) AS street1_upper 
FROM 
    HELENS_DATA 
ORDER BY 
    street1_upper DESC;