[英]Using CASE with IN rather than =
我想做以下事情,但是我找不到實現它的好方法。 下列:
where i.expirationdate in
case when i.locationstate = 'ca' then
case when datepart(month, @RunDate) < 3 then
(dateadd(day, 60, @RunDate))
when datepart(month, @RunDate) = 3 then
(dateadd(day, 60, @RunDate), dateadd(day, 90, @RunDate))
else
(dateadd(day, 90, @RunDate))
end
else
(dateadd(day, 45, @RunDate))
end
引發錯誤:
關鍵字“ case”附近的語法不正確
它與=
但是顯然我失去了in
的好處。 這是不可能的嗎?
您不能在IN
內使用CASE
。 CASE
是一個返回最多單個值的表達式 ; 它不能像其他語言中的CASE
語句那樣用於控制流,也不能用於返回多個值(如IN
一樣)。
我會這樣重寫它:
DECLARE @m TINYINT = DATEPART(MONTH, @RunDate),
@d45 DATETIME = DATEADD(DAY, 45, @RunDate),
@d60 DATETIME = DATEADD(DAY, 60, @RunDate),
@d90 DATETIME = DATEADD(DAY, 90, @RunDate);
SELECT
...
WHERE
(
i.locationstate = 'ca' AND
(
( @m < 3 and i.expirationdate = @d60 )
OR ( @m = 3 and i.expirationdate IN (@d60, @d90) )
OR ( @m > 3 AND i.expirationdate = @d90 )
)
)
OR
(
i.locationstate <> 'ca' AND i.expirationdate = @d45
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.