2016-05-02 8 views
0

Я использую следующий запрос, чтобы получить кредитные баллы, как будет добавить еще два условия, если ID_Points = 2, то 0,5 и ID_points = 3, то 0,25Множественные условия Case

SELECT  
    Attend_ID, 
    Attend_Date, 
    ID_Points, 
    Employee_ID, 
    First_Name, 
    Last_Name, 
    NextDate, 
    NEXT123, 
    Difference, 
    DAY90CREDIT, 
    CREDITDATE, 
    CASE 
     WHEN (day90Credit = 0 AND CreditDate < Getdate()) 
      OR DateAdd(DAY, 90, attend_date) < COALESCE (NextDate, GETDATE()) 
     AND ID_Points = 1 THEN 1 
     ELSE 0 END AS TOTALCREDIT     
FROM 
    dbo.Test_DiffNintyDays   
+0

Какая СУБД вы используете? –

ответ

3

Хорошее форматирование делает это намного проще и более очевидны:

Предполагая, что ваше описание было буквальным:

SELECT  Attend_ID, 
      Attend_Date, 
      ID_Points, 
      Employee_ID, 
      First_Name, 
      Last_Name, 
      NextDate, 
      NEXT123, 
      Difference, 
      DAY90CREDIT, 
      CREDITDATE, 
      CASE 
       WHEN (day90Credit = 0 AND CreditDate < Getdate()) 
        OR DateAdd(DAY, 90, attend_date) < COALESCE (NextDate, GETDATE()) 
       AND ID_Points = 1 THEN 1 
       WHEN ID_Points = 2 THEN 0.5 
       WHEN ID_Points = 3 THEN 0.25 
       ELSE 0 END AS TOTALCREDIT     
    FROM  dbo.Test_DiffNintyDays    

Однако, я подозреваю, что вы на самом деле имел в виду следующее:

SELECT  Attend_ID, 
      Attend_Date, 
      ID_Points, 
      Employee_ID, 
      First_Name, 
      Last_Name, 
      NextDate, 
      NEXT123, 
      Difference, 
      DAY90CREDIT, 
      CREDITDATE, 
      CASE 
       WHEN (day90Credit = 0 AND CreditDate < Getdate()) 
        OR DateAdd(DAY, 90, attend_date) < COALESCE (NextDate, GETDATE()) 
       AND ID_Points = 1 THEN 1 
       WHEN (day90Credit = 0 AND CreditDate < Getdate()) 
        OR DateAdd(DAY, 90, attend_date) < COALESCE (NextDate, GETDATE()) 
       AND ID_Points = 2 THEN 0.5 
       WHEN (day90Credit = 0 AND CreditDate < Getdate()) 
        OR DateAdd(DAY, 90, attend_date) < COALESCE (NextDate, GETDATE()) 
       AND ID_Points = 3 THEN 0.25 
       ELSE 0 END AS TOTALCREDIT     
    FROM  dbo.Test_DiffNintyDays    
+0

Мой +1 связан с наблюдением «Хорошее форматирование». – sergiol

+0

Спасибо RBarry Young – jsmabbas

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