J'ai cette requête Oracle SQL:
SELECT col1, col2, DECODE( myVariable, NULL, 0, myVariable ) FROM mytable group by col1, col2;
4 Réponses :
Non, mais vous pouvez faire une sous-requête:
SELECT col1, col2, DECODE( SUM(myColumn), NULL, 0, SUM(myColumn) ) FROM ( SELECT col1, col2, CASE WHEN col3='A' AND col4='+' THEN col5 ELSE 0 END myColumn FROM mytable ) a group by col1, col2;
Oui, vous pouvez utiliser des variables de substitution: Plus d'infos ici Variables de substitution Oracle SQL * Plus P> P>
Je crois que l'intention est de traiter somme (cas lorsque Col3 = 'a' et col4 = '+' puis col5 0 extrémité) code> comme "variable" afin qu'il n'a pas besoin d'être répété, non pas passer en quantités arbitraires comme variables,
vous pouvez simly utiliser coalesce () code> (ou
nvl () code>) au lieu de
décodage () code>.
SELECT col1,
col2,
coalesce(sum(CASE
WHEN col3 = 'A'
AND col4 = '+' THEN
col5
ELSE
0
END),
0)
FROM mytable
GROUP BY col1,
col2;
Vous pouvez utiliser dans le fait réel, cette expression: p> ne peut pas retourner so, cela devrait également faire ce que vous voulez: p> coalesce () code>. Je pense que cela suffit:
null code> in Une requête avec un groupe
par code> - chaque groupe a au moins une ligne et le
eleser code> garantit un
0 code> renvoie plutôt que
null < /code >.
Comment avez-vous l'intention d'utiliser cette requête? Les variables ne sont pas une chose SQL mais appartiennent au domaine du logiciel qui dirige la requête. La solution dépendra donc de la question de savoir si votre souhait d'exécuter la requête de manière interactive dans un client tel que SQL * Plus, dans le cadre d'une procédure stockée paramétré ou en tant que système de préparé JDBC (pour nommer que trois possibilités).