[英]Case When to check if is null
我为报告的客户提供了一个过滤器,如果有人将其使用的过滤器放在“客户”中,则它会忽略并带来所有客户。 这是我的Where子句。
Where [S].ano_mes = @ano_mes OR @ano_mes IS NULL
AND S.cnpj = @cnpj or @cnpj is null
AND S.cod_produto = @cod_produto or @cod_produto is null
AND CASE WHEN (len(@cnpj) > 0) THEN
(S.CGC_Cliente +''-''+S.Seq_Cliente) in(SELECT cnpjseq FROM #Tb_CliSelecionados)
END
问题出在CASE WHEN部分,其余部分起作用。
如果变量@cnpj的值为THEN,则应使用过滤器。
过滤器是CGC_CLIENTE和SEQ_CLIENTE一起。
表#Tb_CliSelecionados具有参数Concatenated等于,例如,别名为S的表和#Tb_CliSelecionados具有'060746948041730-00'
我在“ IN”中分两部分得到错误提示,在“ IN”附近说不正确的语法,在END中说“ END”附近的不正确的语法。Expection“)”
有人知道我在什么情况下做错了吗?
CASE
返回一个表达式不是流控制。
AND CASE WHEN len(@cnpj) IS NULL
THEN 1
WHEN (len(@cnpj) > 0)
THEN CASE WHEN exists
(SELECT 1
FROM #Tb_CliSelecionados
WHERE cnpjseq = S.CGC_Cliente +''-''+ S.Seq_Cliente )
THEN 1 -- if exist the match return the row
ELSE 0 -- other wise ignore the row
END
ELSE 1 -- if len(@cnpj) == 0 then return all rows
END = 1 -- HERE YOU return the row if CASE return 1
CASE WHEN
子句不正确。 它应该看起来像:
AND CASE
WHEN @cnpj IS NULL
THEN 1
WHEN (len(@cnpj) = 0)
THEN 1
WHEN (S.CGC_Cliente +''-''+S.Seq_Cliente) in (SELECT cnpjseq FROM #Tb_CliSelecionados
THEN 1
ELSE 0
END = 1
您可以将该部分更改为
AND ( len(@cnpj) > 0
AND S.CGC_Cliente + '-' + S.Seq_Cliente in (SELECT cnpjseq FROM #Tb_CliSelecionados))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.