【问题标题】:COALESCE not working?COALESCE 不起作用?
【发布时间】:2014-01-19 14:31:33
【问题描述】:

我的 P.EMP_PAY_DUE_TO_LEAVE_DATE 字段中有 NULLS,我尝试使用以下代码消除它们,但 NULLS 仍然存在!

SELECT DISTINCT V.EMP_CODE
, CASE 
    WHEN V.HIST_PERIOD < 10 
    THEN 
        CAST(V.HIST_YEAR AS VARCHAR)     + RIGHT('0' + CAST (V.HIST_PERIOD + 3 AS VARCHAR), 2) 
    ELSE 
        CAST(V.HIST_YEAR + 1 AS VARCHAR) + RIGHT('0' + CAST (V.HIST_PERIOD - 9 AS VARCHAR) ,2) 
  END AS PAYPERIOD
, V.Department_Id
, CASE 
    WHEN MONTH (P.EMP_PAY_DUE_TO_LEAVE_DATE) >= MONTH(DATEADD(M, -1, GETDATE()) 
    OR P.EMP_PAY_DUE_TO_LEAVE_DATE IS NULL 
    THEN 
        COALESCE
        (
            CONVERT
            (
                DECIMAL(10, 2)
                , V.EMP_SORT_DESC
            )
            , 0
        ) / 37.5
    END AS FTE

我看不出我的代码有什么问题,但显然有!谁能看出问题?

【问题讨论】:

    标签: sql coalesce


    【解决方案1】:

    你最后的...

    CASE
      WHEN (MONTH (P.EMP_PAY_DUE_TO_LEAVE_DATE) >= MONTH(DATEADD(M, -1, GETDATE())) OR P.EMP_PAY_DUE_TO_LEAVE_DATE IS NULL) 
        THEN (COALESCE (CONVERT (DECIMAL (10, 2) ,V.EMP_SORT_DESC), 0) / 37.5) END AS FTE
    

    没有ELSE 大小写,如果THEN 大小写不适用,则隐式变为NULL

    【讨论】:

    • 仅供参考:我重新格式化了代码以使其更易于阅读/这样做使隐含的 else 显式 - 但对其进行了评论,因此很明显它不在原始代码中。
    • @JohnLBevan - 您不应进行使现有答案无效的编辑。我已经删除了ELSE,所以这个答案仍然有意义。
    • @MartinSmith:同意。仅供参考:我在答案存在之前进行了编辑/只是为了让代码在回答之前对我自己和其他人更具可读性;因为提问者说问题出在合并上,所以直到我进行编辑并在上下文中看到它之后,我才想到这个案例会成为问题。
    • @JohnLBevan 没有伤害!当问题包含ELSE 时,回答说没有ELSE 有点奇怪!
    猜你喜欢
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    • 2015-01-12
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多