3 votes

Mélanger les mots-clés DISTINCT et UPPER

J'ai cette requête sur Oracle 10 :

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

Cela fonctionne et me permet d'obtenir quelque chose comme :

MARIA LUISA
Mariano
MARIO

Ce que je voudrais vraiment, c'est obtenir chaque ligne en majuscules, mais je n'arrive pas à trouver un moyen de mélanger les majuscules et les minuscules. DISTINCT y UPPER mots-clés ensemble. J'ai essayé de remplacer la première ligne de la requête par l'un ou l'autre de ces éléments :

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

mais j'ai toujours eu des problèmes ! La sous-requête est-elle la seule solution ?

8voto

APC Points 69630

Cela devrait fonctionner.

SELECT DISTINCT UPPER(nome)   

En effet, cela fonctionne. Si vous obtenez cette erreur ...

ORA-01791: not a SELECTed expression

...alors vous n'avez pas posté toute la requête. En particulier, vous ne nous montrez pas la clause ORDER BY. Avec un DISTINCT, les attributs de la clause ORDER BY doivent correspondre à la projection. Donc, soit vous devez ...

ORDER BY upper(nome)

... ou vous pouvez tricher et trier par position à la place ...

ORDER BY 1

0voto

user1992821 Points 258

Dans le cas où votre SGBD ne supporte pas la combinaison de DISTINCT et UPPER (ce qui serait très étrange), vous pouvez essayer d'utiliser GROUP BY au lieu de DISTINCT, comme ceci :

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

Si l'implémentation de LIKE de votre SGBD est sensible à la casse, il peut également exister une variante d'opérateur insensible à la casse appelée "ILIKE", qui peut être utilisée à la place de LIKE avec UPPER dans la clause WHERE :

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

Cela dépend du SGBD que vous utilisez...

0voto

S Prabhudev Points 1

Essayez ceci

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

OU

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X