WHERE子句中的CASE使用IN命令

时间:2014-04-28 04:02:18

标签: sql sql-server tsql case where

我需要执行这样的声明:

Select myColumn
From myTable
WHERE
CASE 
WHEN Datepart(y,@year_end) = 2010 and Datepart(m,@year_end) = 3 then CalendarQuarter in (@Q1,@Q2,@Q3,@Q4) 
WHEN Datepart(y,@year_end) = 2010 and Datepart(m,@year_end) = 6 then CalendarQuarter in (@Q2,@Q3,@Q4)
WHEN Datepart(y,@year_end) = 2010 and Datepart(m,@year_end) = 9 then CalendarQuarter in (@Q3,@Q4)  
END

我无法正确使用语法。基本上,当我提供2010年和3月的年份时,我想要使用第一个IN语句。如果我说月份= 6,那么我想要使用第二个IN语句。

1 个答案:

答案 0 :(得分:1)

布尔表达式在SQL语法上有区别;他们不只是评估为布尔值的其他正常表达式。因此,您不能在THEN ... IN ...表达式中使用THEN作为CASE子句(因为该子句需要正常表达式,而不是布尔表达式),并且您可以使用WHERE CASE ...。 t使用WHERE作为CASE ...子句(因为该子句需要一个布尔表达式,Select myColumn From myTable WHERE Datepart(yy,@year_end) = 2010 AND CalendarQuarter IN ( (CASE WHEN Datepart(m,@year_end) = 3 THEN @Q1 END), (CASE WHEN Datepart(m,@year_end) IN (3,6) THEN @Q2 END), @Q3, @Q4 ) ; 不是)。

有各种方法可以解决这个问题。在你的情况下,你可能写这样的东西:

{{1}}