Question

I have an Excel sheet and have this formula below. I would like to calculate the same formula with sql. In excel formula there is a nested if condition. Is it possible with sql ? I have tried with "Case .. When .. Then .. Else .." but I could not manage! In my excel sheet this calculation result is "OK"

Thank you,

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 Formula

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

Solution

this should help you (done on MS SQL Server, maybe your database system needs small changes to syntax). Case-when is working fine, but you need to have your timespan values as a number for being able so substract.

Cheers.

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

OTHER TIPS

Yes, you can nest CASE statements, something like this:

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

first, indent your IF:

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

second, translate it to 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

This is your nested if.

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

      )
 )

You can do this with 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"
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top