I want to add two numbers together but when one of those numbers is null then the result is null. Is there a way around this. I could simply do it in the code but I would rather have it done in the query. This is a oracle database.
The table structure
hours_t type craft regular overtime A 1 5 0 A 1 3 1 B 2 9 <null> B 1 4 4
The query
select type, craft, sum(regular + overtime) as total_hours from hours_t group by type, craft order by type, craft
The unwanted results
type craft total_hours A 1 9 B 1 8 B 2 <null>
The wanted results
type craft total_hours A 1 9 B 1 8 B 2 9
NVL(value, default) is the function you are looking for.
select type, craft, sum(NVL(regular, 0) + NVL(overtime, 0) ) as total_hours from hours_t group by type, craft order by type, craft
Oracle have 5 NULL-related functions:
NVL:
NVL(expr1, expr2)
NVL lets you replace null (returned as a blank) with a string in the results of a query. If expr1 is null, then NVL returns expr2. If expr1 is not null, then NVL returns expr1.
NVL2 :
NVL2(expr1, expr2, expr3)
NVL2 lets you determine the value returned by a query based on whether a specified expression is null or not null. If expr1 is not null, then NVL2 returns expr2. If expr1 is null, then NVL2 returns expr3.
COALESCE
COALESCE(expr1, expr2, ...)
COALESCE returns the first non-null expr in the expression list. At least one expr must not be the literal NULL. If all occurrences of expr evaluate to null, then the function returns null.
NULLIF
NULLIF(expr1, expr2)
NULLIF compares expr1 and expr2. If they are equal, then the function returns null. If they are not equal, then the function returns expr1. You cannot specify the literal NULL for expr1.
LNNVL
LNNVL(condition)
LNNVL provides a concise way to evaluate a condition when one or both operands of the condition may be null.
More info on Oracle SQL Functions
select type, craft, sum(nvl(regular,0) + nvl(overtime,0)) as total_hours from hours_t group by type, craft order by type, craft
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With