2014-01-19 82 views
1

我在我的P.EMP_PAY_DUE_TO_LEAVE_DATE字段中有NULLS,並試圖通過使用下面的代碼來消除它們,但NULLS仍然存在!COALESCE不工作?

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 

我看不出我的代碼有什麼問題,但顯然存在!任何人都可以看到問題嗎?

回答

3

你最後...

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情況下,含蓄變得NULL如果THEN情況下不適用。

+0

供參考:我重新格式化了代碼,使其更易於閱讀/這樣做使隱含的其他內容變得明確 - 但對它進行了評論,因此很明顯它不在原始代碼中。 – JohnLBevan

+1

@JohnLBevan - 你不應該進行編輯,使現有的答案無效。我刪除了「ELSE」,所以這個答案仍然有意義。 –

+0

@馬丁史密斯:同意。供參考:我在答案存在之前做了編輯/只是爲了在回答之前讓自己和他人更易於閱讀代碼;因爲提問者說這個問題與合併有關,所以我沒有想到這種情況將會是我編輯並在上下文中看到的問題。 – JohnLBevan