Somme des colonnes avec des valeurs null dans oracle
Je veux ajouter deux nombres ensemble, mais lorsque l'un de ces nombres est nul, le résultat est null. Est-il un moyen de contourner cela. Je peux simplement le faire dans le code, mais je préférerais l'avoir fait dans la requête. C'est une base de données oracle.
La structure de la table
hours_t
type craft regular overtime
A 1 5 0
A 1 3 1
B 2 9 <null>
B 1 4 4
La requête
select type, craft, sum(regular + overtime) as total_hours
from hours_t
group by type, craft
order by type, craft
Les résultats indésirables
type craft total_hours
A 1 9
B 1 8
B 2 <null>
Les résultats désirés
type craft total_hours
A 1 9
B 1 8
B 2 9
- Par ailleurs, merci de ne pas supprimer vos commentaires, si une réponse a été donnée 😉
- j'ai supprimé le commentaire, car l'répondu a changé.
Vous devez vous connecter pour publier un commentaire.
NVL(valeur par défaut) est la fonction que vous recherchez.
Oracle ont 5 NULS et fonctions connexes:
NVL:
NVL2 :
FUSIONNER
NULLIF
LNNVL
Plus d'infos sur Oracle SQL Fonctions
Les autres réponses concernant l'utilisation de nvl() sont corrects mais aucun n'semblent répondre à un plus point saillant:
Si vous même avez des valeurs Null dans cette colonne?
Ont-ils un sens autre que 0?
Cela semble être un cas où vous devriez avoir une not NULL DEFAULT 0 sur th ecolumn
Le top-rated réponse avec NVL est totalement valide. Si vous avez tout intérêt à faire de votre code SQL plus portable, vous pourriez vouloir utiliser des CAS, ce qui est pris en charge avec la même syntaxe dans Oracle et SQL Server:
Vous devez utiliser la fonction NVL, par exemple
SOMME(NVL(régulier,0) + NVL(heures supplémentaires,0))
Code:
Dans certains cas, nvl(somme(nom_colonne),0) est également nécessaire. Vous voudrez peut-être considérer les scénarios.
Par exemple,
Je suis en train de récupérer la somme d'une colonne particulière, à partir d'une table en fonction de certaines conditions. Sur la base des conditions,
Si vous utilisez la somme(nvl(nom_colonne,0)) ici, ce serait vous donner la valeur null.
Ce que vous voulez est nvl(somme(nom_colonne),0).
Cela peut être nécessaire, particulièrement lorsque vous êtes de passage à ce résultat, par exemple, java, ont le type de données que le nombre il y, car alors ce ne sera pas besoin spécial de la gestion des valeurs null.