[英]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.