Reputation: 177
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")))
Upvotes: 1
Views: 800
Reputation: 46
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
Upvotes: 3
Reputation: 51705
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"
Upvotes: 1
Reputation: 17643
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
Upvotes: 1
Reputation: 147314
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
Upvotes: 3