[英]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.