我需要执行这样的声明:
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语句。
答案 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}}