2014-01-19 5 views
1

У меня есть NULLS в поле P.EMP_PAY_DUE_TO_LEAVE_DATE, и я попытался устранить их, используя следующий бит кода, но 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

FYI: Я переформатировал код, чтобы упростить его чтение /, делая это явным неявным явным, но прокомментировал его, поэтому ясно, что он не был в исходном коде. – JohnLBevan

+1

@JohnLBevan - Вы не должны вносить изменения, которые недействительны для существующих ответов. Я удалил 'ELSE', поэтому этот ответ по-прежнему имеет смысл. –

+0

@MartinSmith: Согласен. FYI: Я сделал редактирование до того, как существовал ответ/просто, чтобы сделать код более читаемым для себя и других, прежде чем отвечать; так как вопросник сказал, что проблема связана с объединением, мне не приходило в голову, что дело будет вопросом до тех пор, пока я не сделаю редактирование и не увижу его в контексте. – JohnLBevan

Смежные вопросы