我需要在这两个查询的结果之间做出改变。
SELECT SUM(overwritten_ecl+ overwritten_ecl_off) A1
FROM llpa.h_rt_ifrs_provision
WHERE calculation_id = 1624
AND stage = 1
AND id_rip_code = 'HOPISD'
AND actual_urg = '0.5'
和这一个
SELECT SUM(overwritten_ecl+ overwritten_ecl_off) A2
FROM llpa.h_rt_ifrs_provision
WHERE calculation_id = 1652
AND stage = 1
AND id_rip_code = 'HOPISD'
AND actual_urg = '0.5'
第一个查询的结果是:123456,第二个查询结果是:2345678。 我需要做的是123456 - 2345678之间的简单区别。 如何使用一个查询来完成?我尝试了MINUS运算符,但它没有用。 我正在使用ORACLE SQL。
答案 0 :(得分:3)
使用case
表达式进行条件聚合。正值为1624 id的正值和1652 id的负值。
SELECT SUM(case calculation_id
when 1624 then overwritten_ecl + overwritten_ecl_off
when 1652 then -overwritten_ecl - overwritten_ecl_off
else 0
end)
FROM llpa.h_rt_ifrs_provision
WHERE calculation_id IN (1624, 1652)
AND stage = 1
AND id_rip_code = 'HOPISD'
AND actual_urg = '0.5'
基本上与Radim相同的答案,除了我在WHERE
子句中保留了calculate_id条件。可以加快速度。
答案 1 :(得分:0)
使用条件聚合
SELECT SUM(CASE WHEN calculation_id = 1624 THEN overwritten_ecl+ overwritten_ecl_off ELSE 0 END) -
SUM(CASE WHEN calculation_id = 1652 THEN overwritten_ecl+ overwritten_ecl_off ELSE 0 END) diference
FROM llpa.h_rt_ifrs_provision
WHERE stage = 1
AND id_rip_code = 'HOPISD'
AND actual_urg = '0.5'