Cela fonctionne:Encountering ORA-00979: pas GROUP BY expression lors de l'utilisation CASE - IN déclarations sql
SELECT (CASE
WHEN x = 'value' THEN
a.col1
ELSE
nvl(a.col1, a.col2)
END)
FROM table1 a
WHERE a.this = 'that'
GROUP BY (CASE
WHEN x = 'value' THEN
a.col1
ELSE
nvl(a.col1, a.col2)
END)
Mais en essayant d'avoir la déclaration de cas faire une déclaration IN (en essayant une sql plus dynamique ici), le code suivant génère une erreur ORA-00979.
SELECT (CASE
WHEN x IN (SELECT me FROM here WHERE this = 'example') THEN
a.col1
ELSE
nvl(a.col1, a.col2)
END)
FROM table1 a
WHERE a.this = 'that'
GROUP BY (CASE
WHEN x IN (SELECT me FROM here WHERE this = 'example') THEN
a.col1
ELSE
nvl(a.col1, a.col2)
END)
Est-il possible de faire ce travail ou d'avoir une alternative? Merci. --Jonas
Benoit: Voici un sql modifié en fonction de votre sql recréant l'erreur:
select (case when a.y IN (select 'A'||ROWNUM from dual where rownum=1) then 1 else 0 end)
from (SELECT 'A'||ROWNUM y, 'B' x FROM DUAL CONNECT BY ROWNUM <= 3) a where x = 'B'
group by (case when a.y IN (select 'A'||ROWNUM from dual where rownum=1) then 1 else 0 end)
;
Fondamentalement, ce qui ne manquait que la table FROM devrait avoir plus de valeurs et qu'un colonne a été référencée dans l'instruction CASE.
Quelle version d'Oracle utilisez-vous? –
Oublié d'ajouter. Nous utilisons Oracle 10g – jonasespelita
Votre dernière sélection fonctionne sur Oracle 11gR2, pas sur v9. – Benoit