关于sql server:SQL Where Case with multiple criteria error

SQL Where Case with multiple criteria error

我正在尝试编写带有条件 where 子句的语句。问题是由于需要使用 IN 返回多个条件。目前我正在返回错误:

Incorrect syntax near the keyword 'IN'.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/****** Script for SelectTopNRows command from SSMS  ******/
DECLARE @paramTime VARCHAR(50);
DECLARE @paramView VARCHAR(50);
SET @paramTime = '2020M2';
SET @paramView = 'YTD';

SELECT *
FROM [dbo].[vBiB_AllAccounts]

WHERE
[sTime] =

CASE
WHEN @paramView = 'YTD' AND @paramTime = '2020M1' THEN
'2020M1'
WHEN @paramView = 'YTD' AND @paramTime = '2020M1' THEN
IN('2020M1','2020M2')
END


不要在 where 子句中使用 case。特别是当它可以轻松更换时:

1
WHERE (@paramView = 'YTD' AND @paramTime = '2020M1' AND [sTime] = '2020M1')

你的两个 when 条件是一样的,所以这相当于你问题中的逻辑。

您可以使用 or.

添加其他逻辑


假设条件集实际上是不同的(在您展示的代码中不是这种情况,但对您的问题有意义),请使用 or:

1
2
3
4
5
6
7
8
9
10
WHERE
    (
        @paramView = 'YTD'
        AND @paramTime = '2020M1'
        AND [sTime] = '2020M1'
    ) OR (
        @paramView = 'YTD'
        AND @paramTime = '2020M1'
        AND [sTime] IN ('2020M1','2020M2')
    )