Sql условия заявления - PullRequest
       29

Sql условия заявления

1 голос
/ 18 января 2012

У меня есть лист 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")))

Ответы [ 4 ]

3 голосов
/ 18 января 2012

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

Приветствие.

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
3 голосов
/ 18 января 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
1 голос
/ 18 января 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"
1 голос
/ 18 января 2012

сначала укажите отступ IF:

=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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...