关于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

  • 您的两个 when 条件相同。
  • CASE 是一个表达式,它产生一个标量值,而不是一个布尔结果。
  • 您能否澄清一下您要达到的目标?
  • 此答案中显示了在 where 或 on 子句中使用 CASE 的”正确”方式。正如其他人所表明的,有比 CASE 更好的方法来解决问题。


不要在 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’)
    )
  • 谢谢,这就是我自己的地方,我希望能够纯粹从可读性的angular使用案例,但解决方案过于复杂我的问题是我需要相当多的 OR 来完成对帐单用于交易的 YTD 和 QTD 视图。 17个左右。不幸的是,我的双手在数据源方面受到束缚。这是迄今为止的交易平面表,因此希望对选择进行一些参数化。


来源:https://www.codenong.com/60511799/

微信公众号
手机浏览(小程序)

Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_8928.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
0
分享到:
没有账号? 忘记密码?