gpt4 book ai didi

mysql - Case 何时检查是否为空

转载 作者:行者123 更新时间:2023-11-29 06:04:02 26 4
gpt4 key购买 nike

我有一个用于报告客户的过滤器,如果有人放置它使用的过滤器客户端,否则它会忽略并带来所有客户。这是我的 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 有值,那么它应该使用过滤器。

过滤器是 CGC_CLIENTE 和 SEQ_CLIENTE 一起。

#Tb_CliSelecionados 表有参数 Concatenated equals,例如,别名 S 和#Tb_CliSelecionados 的表都有 '060746948041730-00'

我在“IN”中的两个部分出现错误,它说“IN”附近的语法不正确并在 END 中说“END”附近的语法不正确。Expection “)”

有人知道我在 when part 的情况下做错了什么吗?

最佳答案

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

关于mysql - Case 何时检查是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42961427/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com