A B C Equal
1 1 1 Y
2 2 NULL N
Olá, tenho 3 colunas que preciso comparar: Colunas A,B,C. Se essas 3 colunas forem iguais, a coluna 'Igual' = 'Y'
Mas, se uma coluna for nula, ela deve ser excluída da comparação, por exemplo, no exemplo, a Linha 2 tem um valor nulo, mas as colunas restantes são todas iguais, então Igual deve ser sim - porque todos os valores não nulos são igual
http://www.sqlfiddle.com/#!3/dedd9/2
Achei que poderia usar isnull(C,A) = A mas não funcionou. Alguém poderia ajudar por favor
declare @t table
(
A decimal,B decimal, C decimal
)
insert Into @t(A,B,C) values (1,1,1)
insert Into @t(A,B) values (2,2)
select A,B,C,'Equal' = case when ISNULL(A,B) = B and ISNULL(B,C) = C and ISNULL(C,A) = A then 'Y' else '' end
from @t
Supondo que você queira que todos os
NULL
s contem como iguais, acho que isso funcionará. Mas eu não testei completamente, ou mesmo pensei sobre isso por muito tempo...COALESCE
escolherá o primeiro nãoNULL
-valor de seus argumentos, portanto, ao testarA
contraB
e depoisB
contraC
, em cada caso, procuramos 'a frente' por um não-NULL
valor, com um fallback para quando todos eles estiveremNULL
Outra maneira, que pode ser facilmente estendida para mais de 3 colunas:
Testado no SQL-Fiddle .
Você estava quase lá com sua consulta. No entanto, sua consulta falha, ao validar isnull(A,B) = B, quando B é nulo, pois NULL não é igual a NULL em sql.
tente isso: