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

问题描述 投票:0回答:4

给定表:

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表示不起作用),我不想用0替换null。

sql oracle
4个回答
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
投票

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


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; 

0
投票

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

if emp_status = 'new' then
    --some code
    working_hours := null;
else
     --some code
    working_hours : 0;
end if;
© www.soinside.com 2019 - 2024. All rights reserved.