【问题标题】:Returning null values when subtracting two values减去两个值时返回空值
【发布时间】:2020-02-14 17:26:47
【问题描述】:

我正在运行查询以获取特定客户在两个时间段(7 月和 8 月)内的总数。然后将两者相减得到差值。但是,即使此客户端的 Jul 和 Aug 都存在值,当我减去时我得到空值。

即使我知道值/数字存在,这部分 select 语句仍返回空值。 'AUG.amount - JUL.amount as Final_Result'

我尝试单独运行 Jul 和 Aug 表,它们确实返回 AH 的总和/总计。

SELECT AUG.party_name, AUG.amount - JUL.amount as Final_Result

FROM (select cl.party_name, sum(cl.amount)/1000 as amount
from CLIENT_PROFIT CL
where to_char(trade_date,'YYYYMMDD') between '20190801' and '20190830'
AND cl.party_name = 'AH'
group by cl.party_name
) AUG

LEFT JOIN

(select cl.party_name, sum(cl.amount)/1000 as amount
from CLIENT_PROFIT CL
where to_char(trade_date,'YYYYMMDD') between '20190701' and '20190731'
AND cl.party_name = 'AH'
group by cl.party_name) JUL

ON AUG.party_name = JUL.party_name

group by AUG.party_name

order by Final_Result DESC

预期结果应该显示 AH 的 8 月和 7 月之间的差异

【问题讨论】:

    标签: sql oracle aggregation


    【解决方案1】:

    你可以使用 Conditional Aggregation 而不使用 group by 表达式,因为你只有一个派对名称:

    select 'AH' as party_name, 
           sum(case when to_char(trade_date,'YYYYMM')='201908' then cl.amount/1000 end) - 
           sum(case when to_char(trade_date,'YYYYMM')='201907' then cl.amount/1000 end)
           as Final_Result
      from CLIENT_PROFIT CL
     where cl.party_name = 'AH'
    

    【讨论】:

    • to_char(trade_date,'YYYYMMDD')='201908' ,我觉得应该是YYYYMM
    • 非常感谢。我过度思考而不使用更简单的解决方案的另一个案例。
    【解决方案2】:

    您可以使用以下方法直接获取它: 编辑查询以按月使用 trunc。

    select cl.party_name, 
    (sum(case when trunc(trade_date,'month') = date '2019-08-01' then cl.amount end) 
    - sum(case when trunc(trade_date,'month') = date '2019-07-01' then cl.amount end) )  /1000 as amount
    from CLIENT_PROFIT CL
    where trunc(trade_date) between date '2019-07-01' and date '2019-08-31'
    AND cl.party_name = 'AH'
    group by cl.party_name;
    

    另外,您忘记在查询中包含 2019 年 8 月 31 日。

    干杯!!

    【讨论】:

    • 和你一样@BarbarosÖzhan。
    • 顺便提一下 Tejash - 我在使用您的查询时遇到了无效的关系运算符错误。案例陈述中的日期“2019-08-01”似乎是问题所在。我在表格中的日期格式是 DD-MMM-YYYY
    • 更新了答案,实际问题缺失等于操作员。是的,关于日期,日期 'yyyy-mm-dd' 是标准日期函数,不依赖于数据库的日期格式
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多