给出表:
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.谢谢
答案 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;