【问题标题】:Join the results from two queries into one in Oracle SQL在 Oracle SQL 中将两个查询的结果合并为一个
【发布时间】:2021-09-06 10:15:47
【问题描述】:

我有两个查询,我想在不创建函数的情况下加入它们。第一个给了我当前余额的结果。结果是 160 欧元:

select sum(SESSIONS.PRICE) - sum(SESSIONS.AMOUNT)  as v_diff
from SESSIONS
where SESSIONS.CLIENTS_ID =:P2002_ID  
and SESSIONS.STATUS in (4,5);

第二个查询给出了额外的付款。结果是 30 欧元:

select sum(SESSIONS.AMOUNT) as v_extra_amount
from SESSIONS
where SESSIONS.CLIENTS_ID = :P2002_ID 
and SESSIONS.STATUS = 1
and SESSIONS.PAYMENT_STATUS = 2;

所以我想要一个查询给我 130 欧元的金额! (第一个起 160 欧元,第二个起 -30 欧元)。

【问题讨论】:

    标签: sql oracle oracle11g oracle-sqldeveloper oracle-apex


    【解决方案1】:

    只使用条件聚合:

    select (sum(case when s.STATUS in (4, 5) then s.PRICE else 0 end) - 
            sum(case when s.STATUS in (4, 5) then s.AMOUNT else 0 end) 
           ),
           sum(case when s.STATUS = 2 then s.AMOUNT end)
    into v_diff, v_extra_amount
    from SESSIONS s
    where s.CLIENTS_ID = :P2002_ID;
    

    或者,如果你想要一个值,只需减去:

    select (sum(case when s.STATUS in (4, 5) then s.PRICE else 0 end) - 
            sum(case when s.STATUS in (4, 5) then s.AMOUNT else 0 end) -
            sum(case when s.STATUS = 1 and s.PAYMENT_STATUS = 2 then s.AMOUNT end)
           )
    from SESSIONS s
    where s.CLIENTS_ID = :P2002_ID;
    

    【讨论】:

    • 可以对case语句进行减法运算:sum( case when s.STATUS in (4, 5) then s.PRICE-s.AMOUNT else 0 end )
    • @Rafa 。 . .假设这些值不是NULL。问题中没有足够的信息来做出这种假设。
    • and status in (1,4,5) 仅选择使用的行。
    • 非常感谢您的回答!我没有空值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 2019-04-05
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    • 2016-10-27
    • 1970-01-01
    相关资源
    最近更新 更多