【问题标题】:Need to get null back rather than divide by zero需要返回空值而不是除以零
【发布时间】:2020-09-02 22:41:07
【问题描述】:

我必须将旧查询更改为新查询才能获得正确的结果。我的旧查询曾经在分母中返回空值,所以我不必担心除以零,新查询返回除我的零为“M”(R_NTWK_CHNNL),但对于“S”或 R,我不'没有零分母。我该怎么做才能在查询 2 中获得空分母?表定义没有改变,并且想知道为什么现在当“M”中没有任何内容时我没有得到空分母。还请我如何将nullif 添加到查询2?非常感谢。

旧查询

select SUM(CASE WHEN (GNRC_CD in ('O') and  R_NTWK_CHNNL = 'M')  then (CLNT_NET_DUE_AMT + NBNR_CLNT_NET_DUE_AMT) else 0 end ) / sUM(CLMS) from #Clms_SMRY where  SRVC_DT  between @CurrentBeginDate and @CurrentEndDate)

新查询

select SUM(CASE WHEN (GNRC_CD in ('O') ) and R_NTWK_CHNNL =  'M'  then (CLNT_NET_DUE_AMT + NBNR_CLNT_NET_DUE_AMT) else 0 end ) / cast(SUM(CASE WHEN GNRC_CD in ('O') and R_NTWK_CHNNL =  'M' then (CLMS)  end ) as float) from #Clms_Smry where  SRVC_DT  between @CurrentBeginDate and @CurrentEndDate),

【问题讨论】:

  • 你真的打算把分母变成浮动吗?
  • 不,我可能会将它转换为十进制,但是这个“then”正在把它扔掉..
  • 我会把它改成小数谢谢

标签: sql sql-server nullif


【解决方案1】:

使用NULLIF():

select (SUM(CASE WHEN (GNRC_CD in ('O') and R_NTWK_CHNNL = 'M') then (CLNT_NET_DUE_AMT + NBNR_CLNT_NET_DUE_AMT) else 0 end ) / 
        NULLIF(SUM(CLMS), 0)
       ) 
from #Clms_SMRY
where SRVC_DT between @CurrentBeginDate and @CurrentEndDate)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 2013-09-21
    • 1970-01-01
    • 2017-12-10
    相关资源
    最近更新 更多