SQL:当一列具有空值而不用0替换null时,总计3列?

时间:2018-03-05 23:05:29

标签: sql oracle

给出表:

ID   ANOTHERID      ONE    TWO      THREE
X1       B1          15    15       -
X1       B2          10    -        - 
X2       B1          -     20       -

此查询:

SELECT SUM (ONE + TWO + THREE) FROM (TABLE)
GROUP BY ID, ANOTHERID

我也试过

select sum(coalesce( ONE + TWO + THREE, ONE + TWO, ONE + THREE, ONE + 
THREE))

至少有一列具有空值。即使有空值,我怎么还能添加它们?由于null和0在这里有不同的含义(null表示未启动,0表示不起作用),我不想将null替换为0.谢谢

4 个答案:

答案 0 :(得分:1)

一种方法是:

SELECT SUM(COALESCE(ONE, 0) + COALESCE(TWO, 0) + COALESCE(THREE, 0))
FROM (TABLE)
GROUP BY ID, ANOTHERID;

或者,如果每列中至少有一个非NULL值:

SELECT SUM(ONE) + SUM(TWO) + SUM(THREE)

答案 1 :(得分:1)

时间报告表不应允许空值,而员工表应具有雇用日期字段,该字段可用作报告查询中的条件。这将使您能够准确地报告管理层期望的内容。

答案 2 :(得分:1)

此解决方案适合我

select 
case when coalesce(sum(ONE), sum(TWO), sum(THREE)) is null then null else 
sum(nvl(ONE,0) + nvl(TWO,0) + nvl(THREE,0)) end as 
TOTALSUM
GROUP BY ID, ANOTHERID; 

答案 3 :(得分:0)

您可能需要在表格中添加另一列来描述员工的状态(新旧),然后创建如下条件:

if emp_status = 'new' then
    --some code
    working_hours := null;
else
     --some code
    working_hours : 0;
end if;