A B C Equal
1 1 1 Y
2 2 NULL N
嗨,我有 3 列需要比较:A、B、C 列。如果这 3 列相同,则列 'Equal' = 'Y'
但是,如果一列为空,则必须将其排除在比较之外,例如,在示例中第 2 行为空,但其余列都相同,因此 Equal 应该为 yes - 因为所有非空值都是平等的
http://www.sqlfiddle.com/#!3/dedd9/2
我以为我可以使用 isnull(C,A) = A 但它不起作用。有人可以帮忙吗
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
假设您希望所有
NULL
s 都被视为相等,我认为这会起作用。但是我还没有彻底测试它,甚至没有考虑很长时间......COALESCE
将从其参数中选择第一个非NULL
值,因此在测试A
反对B
然后B
反对C
时,在每种情况下,我们都会“向前”寻找非NULL
值,并在它们全部时回退NULL
另一种方式,可以很容易地扩展到超过 3 列:
在SQL-Fiddle测试。
您的查询几乎就在那里。但是,当验证 isnull(A,B) = B 时,当 B 为空时,您的查询失败,因为 NULL不等于 sql 中的 NULL。
尝试这个: