Sql server Sql WHERE子句中的大小写和用法
我正在编写一份报告,由于数据集的级别不同,我需要根据参数灵活调整 我只想要空的或分级的结果。因此,正常的where子句应该是Sql server Sql WHERE子句中的大小写和用法,sql-server,case,Sql Server,Case,我正在编写一份报告,由于数据集的级别不同,我需要根据参数灵活调整 我只想要空的或分级的结果。因此,正常的where子句应该是(x为null或(1,2,3)中的x) 当我试图在案例中实现它时,会出现语法错误 下面是我尝试的,这只是尝试数据集部分,所以我不会在这部分之后硬编码参数值 DECLARE @Type NVARCHAR(30) set @Type = foo select COUNT(A) as A,B,C FROM Activity act inner join x in
(x为null或(1,2,3)中的x)
当我试图在案例中实现它时,
会出现语法错误
下面是我尝试的,这只是尝试数据集部分,所以我不会在这部分之后硬编码参数值
DECLARE @Type NVARCHAR(30)
set @Type = foo
select COUNT(A) as A,B,C
FROM Activity act
inner join x
inner join v
inner join y
inner join z
where 1=1
and DetailKey = @Type
and cd.Value is null or IN
CASE @Type
WHEN 'foo' THEN ('1','2','3') ELSE
WHEN 'bar' THEN ('YR','OR','DR') END
编辑:由于简短,示例中省略了连接,它们不是问题。不可能将值列表作为
大小写表达式的谓词。但您可以将WHERE
子句改写如下:
WHERE
1 = 1 AND -- not sure if this is needed
DetailKey = @Type AND
(cd.Value IS NULL OR
(@Type = 'foo' AND cd.Value IN ('1','2','3')) OR
(@Type = 'bar' AND cd.Value IN ('YR', 'OR', 'DR')))
不可能将值列表作为大小写
表达式的谓词。但您可以将WHERE
子句改写如下:
WHERE
1 = 1 AND -- not sure if this is needed
DetailKey = @Type AND
(cd.Value IS NULL OR
(@Type = 'foo' AND cd.Value IN ('1','2','3')) OR
(@Type = 'bar' AND cd.Value IN ('YR', 'OR', 'DR')))
那么,您能否发布完整的查询,以便我们指出哪里是错误的?语法错误时的情况也是如此1=1
的含义是什么?这只是增加了处理时间,没有任何好处。1=1使我在测试许多不同的where子句时更加容易。实际代码没有真正的好处。请明确-CASE
是一个表达式。它生成一个标量值(每行)。它不允许您任意重构SQL语句的结构。那么,您能否发布完整的查询,以便我们指出哪里出错?语法错误时的情况是什么1=1
?这只是增加了处理时间,没有任何好处。1=1使我在测试许多不同的where子句时更加容易。实际代码没有真正的好处。请明确-CASE
是一个表达式。它生成一个标量值(每行)。它不允许您任意重构SQL语句的结构。