我可以在select语句中使用`If`吗?

时间:2012-10-10 14:24:23

标签: sql sql-server tsql

你甚至可以在这样的选择中添加if语句,还是必须使用Case语句来实现我在这里做的事情?我目前遇到语法错误:

Select 
    field1,
    field2,
    If( @CurrentDate = @lastDate and @CurrentWeek = @lastWeek) 
              select @CurrentWeek,
    .... rest of select statement

4 个答案:

答案 0 :(得分:2)

您需要使用CASE。但请注意,您可以将CASE用作SWITCHIF ... THEN ... ELSEIF ... ELSE,因此您可以灵活使用。

例如:

DECLARE @flag INT
SET @flag = 1

-- Switch
SELECT CASE @flag WHEN 1 THEN 'Condition True' 
                  WHEN 0 THEN 'Condition FALSE' 
                  ELSE 'Condition Invalid' 
       END

-- If / elseif / else
SELECT CASE WHEN @flag = 1 
                 THEN 'Condition True' 
            WHEN @flag = 0 AND @@SERVERNAME = 'TotallyUnrelatedToFlag' 
                 THEN 'Condition FALSE' 
            ELSE 'Condition Invalid' 
       END

在您的示例中,您似乎需要符合

的内容
Select 
    field1,
    field2,
    CASE WHEN (@CurrentDate = @lastDate and @CurrentWeek = @lastWeek) 
         THEN @CurrentWeek
         ELSE NULL
    END As field3

答案 1 :(得分:1)

听起来你想要CASE声明

Select 
    field1,
    field2,
    case when @CurrentDate = @lastDate and @CurrentWeek = @lastWeek
         then @CurrentWeek else '' end
    .... rest of select statement

如果你想使用IF语句,那么你会想要使用这样的东西:

If (@CurrentDate = @lastDate and @CurrentWeek = @lastWeek)
  begin
    -- place the one select statement here
    select ...from
  end
else
  begin
     -- place the alternate select here
     select... from
  end

答案 2 :(得分:1)

您必须使用案例陈述。 TSQL中的IF...ELSE构造可用于有条件地执行SQ​​L语句。它不能在 SQL语句中使用。请阅读明确的documentation

答案 3 :(得分:0)

试试这个:

Select 
    field1,
    field2,
    CASE WHEN @CurrentDate = @lastDate and @CurrentWeek = @lastWeek THEN @CurrentWeek ELSE '' END as Week,