我有一张Excel表格,下面有这个公式。我想用sql计算相同的公式。在excel公式中,有一个嵌套的if条件。是不是可以用sql?我试过“Case .. When .. Then .. Else ..
”,但我无法管理!在我的Excel工作表中,此计算结果为“OK”
谢谢,
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")))
答案 0 :(得分:3)
是的,您可以嵌套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 :(得分:3)
这应该对你有所帮助(在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
答案 2 :(得分:1)
首先,缩进你的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
答案 3 :(得分:1)
这是你的嵌套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"