Операторы условий SQL

У меня есть лист Excel и эта формула ниже. Я хотел бы рассчитать ту же формулу с sql. В формуле Excel есть вложенное условие if. Возможно ли это с помощью sql? Я пробовал с "Case .. When .. Then .. Else ..", но у меня не получилось! В моем листе Excel этот результат расчета "ОК"

Спасибо,

Declare @ProjectName nvarchar(max)
Declare @NewTotalElapsedTimeEnd nvarchar(max)
Declare @TotalElapsedTime nvarchar(max)
Declare @SlaTime nvarchar(max)
Declare @Result nvarchar(max)

set @ProjectName = ''
set @NewTotalElapsedTimeEnd = 0
set @TotalElapsedTime = 69563
set @SlaTime = 86400

Формула Excel

=IF(ProjectName<>"","PROJECTED",IF(NewTotalElapsedTimeEnd=0,IF(TotalElapsedTime-SlaTime<0,"OK","NOK"),IF(NewTotalElapsedTimeEnd-SlaTime<0;"OK";"NOK")))

person qods    schedule 18.01.2012    source источник
comment
Ваши три переменные времени, вероятно, должны быть объявлены как числовые типы, такие как int, а не как nvarchar(max) .   -  person    schedule 18.01.2012


Ответы (4)


это должно вам помочь (сделано на MS SQL Server, возможно, вашей системе баз данных нужны небольшие изменения в синтаксисе). Case-when работает нормально, но вам нужно, чтобы ваши значения временного промежутка были числовыми, чтобы иметь возможность вычитать.

Ваше здоровье.

Declare @ProjectName nvarchar(max)
Declare @NewTotalElapsedTimeEnd int
Declare @TotalElapsedTime int
Declare @SlaTime int
Declare @Result nvarchar(max)

set @ProjectName = ''
set @NewTotalElapsedTimeEnd = 0
set @TotalElapsedTime = 69563
set @SlaTime = 86400

SET @Result =
    CASE WHEN @ProjectName <> ''
    THEN 'PROJECTED'
    ELSE
        CASE WHEN @NewTotalElapsedTimeEnd = 0
        THEN    
            CASE WHEN @TotalElapsedTime < 0
            THEN 'OK'
            ELSE 'NOK'
            END     
        ELSE
            CASE WHEN (@NewTotalElapsedTimeEnd - @SlaTime) < 0
            THEN 'OK'
            ELSE 'NOK'
            END
        END
    END

SELECT @Result
person TMKILLA    schedule 18.01.2012

Да, вы можете вкладывать операторы CASE, например:

CASE WHEN ProjectName <> '' THEN 'PROJECTED'
ELSE
    CASE WHEN NewTotalElapsedTimeEnd = 0 THEN
            CASE WHEN TotalElapsedTime - SlaTime < 0 THEN 'OK' 
            ELSE 'NOK' END
        ELSE
            CASE WHEN NewTotalElapsedTimeEnd - SlaTime < 0 THEN 'OK' 
            ELSE 'NOK' END
        END
END
person AdaTheDev    schedule 18.01.2012

во-первых, отступ вашего ЕСЛИ:

=IF(ProjectName<>"",
    "PROJECTED",
     IF(NewTotalElapsedTimeEnd=0,
        IF(TotalElapsedTime-SlaTime<0,
            "OK",
            "NOK"),
        IF(NewTotalElapsedTimeEnd-SlaTime<0;"OK";"NOK")))

во-вторых, переведите его в CASE:

    case when ProjectName = "" 
    then "PROJECTED"
    else case when NewTotalElapsedTimeEnd=0 
        then case when TotalElapsedTime-SlaTime<0
             then "OK"
             else "NOK"
             end 
        else case when NewTotalElapsedTimeEnd-SlaTime<0
             then "OK"
             else "NOK"
             end
        end
     end
person Florin Ghita    schedule 18.01.2012
comment
Спасибо, Флорин, за подробное объяснение - person qods; 18.01.2012

Это ваше вложенное if.

IF (ProjectName<>"",
      "PROJECTED",
      IF(NewTotalElapsedTimeEnd=0,
          IF(TotalElapsedTime-SlaTime<0,
              "OK",
              "NOK"
          ),
          IF(NewTotalElapsedTimeEnd-SlaTime<0;
              "OK";
              "NOK"
          )

      )
 )

Это можно сделать с помощью T-SQL IF:

IF @ProjectName<>""
      set @Result ="PROJECTED"
ELSE
      IF @NewTotalElapsedTimeEnd=0
          IF @TotalElapsedTime-@SlaTime<0
              set @Result = "OK"
          ELSE
              set @Result = "NOK"
      ELSE              
          IF @NewTotalElapsedTimeEnd-@SlaTime<0
              set @Result = "OK"
          ELSE
              set @Result = "NOK"
person dani herrera    schedule 18.01.2012