2014-04-28 111 views
0

子句中我需要执行我的发言是这样的:情况下使用命令

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

对于'year'语法是'DATEPART(YY,日期)','DATEPART(Y,日期)'将会返回'dayofyear' –

+0

一个问题解决了! – user2343837

回答

1

布尔表达式在SQL中被语法区分;它们不仅仅是一个正常的表达式,它是一个布尔值。因此,不能将THEN ... IN ...用作CASE表达式中的THEN子句(因为该子句需要正常表达式,而不是布尔表达式),并且不能将WHERE CASE ...用作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 
    ) 
; 
相关问题