2013-03-08 87 views
1

我對甲骨文10此查詢:混合DISTINCT和上關鍵字一起

SELECT DISTINCT NOME 
FROM ICT.UTENTE 
WHERE UPPER(nome) LIKE UPPER('MA%'); 

這工作,讓我得到這樣的:

MARIA LUISA 
Mariano 
MARIO 

我真的會是讓每一行上的情況下,但我想不出一種方法來混合DISTINCTUPPER關鍵字。我試圖用任何這個取代第一個查詢行:

SELECT DISTINCT UPPER(nome) -- not a SELECTed expression 
SELECT UPPER (DISTINCT nome) -- missing expression 
SELECT DISTINCT UPPER nome -- upper: invalid identifier 
SELECT UPPER DISTINCT nome -- FROM keyword not found where expected 

但我總是有麻煩! subquerying是唯一的解決方案嗎?

+0

特別是哪些錯誤? – christopher 2013-03-08 14:47:25

+1

'SELECT DISTINCT UPPER(nome)'應該工作......錯誤是什麼?你正在使用哪些DBMS? – 2013-03-08 14:47:35

+1

像托馬斯提到的'選擇不同的上層'應該工作,我不認爲你需要UPPER在恆定值 - 'UPPER('MA%')' – 2013-03-08 14:51:00

回答

3

這應該工作。

SELECT DISTINCT UPPER(nome) 

確實有效。如果你得到這個錯誤...

ORA-01791: not a SELECTed expression 

...然後你還沒有發佈整個查詢。具體來說,你沒有向我們展示ORDER BY子句。使用DISTINCT時,ORDER BY子句中的屬性必須與投影匹配。因此,無論你需要...

ORDER BY upper(nome) 

...或者你可以不是位置欺騙和排序...

ORDER BY 1 
+0

是的,我是隱藏爲簡明起見,訂單條款。 – 2013-03-14 11:39:32

0

如果你的DBMS真的不支持DISTINCT和上(這是很奇怪)的搭配,你可以嘗試使用GROUP BY而不是DISTINCT,像這樣:

SELECT UPPER(NOME) 
FROM ICT.UTENTE 
WHERE UPPER(nome) LIKE UPPER('MA%') 
GROUP BY UPPER(NOME); 

萬一在LIKE執行DBMS的是大小寫敏感的,也可稱爲「ILIKE」不區分大小寫不同運營商,這可能被用來代替LIKE與UPPER WHERE子句中:

SELECT UPPER(NOME) 
FROM ICT.UTENTE 
WHERE nome ILIKE 'MA%' 
GROUP BY UPPER(NOME); 

這取決於您正在使用的DBMS ...

0

試試這個

SELECT DISTINCT Upper(NOME) as NOME 
FROM ICT.UTENTE 

OR

SELECT Upper(NOME) as NOME 
FROM ICT.UTENTE group by NOME