Sql条件语句

时间:2012-01-18 14:47:22

标签: sql sql-server-2008 excel if-statement case-statement

我有一张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")))

4 个答案:

答案 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"