Sql 比较多个可以为空的列
我想比较一组列并决定:Sql 比较多个可以为空的列,sql,logic,teradata,Sql,Logic,Teradata,我想比较一组列并决定: 如果所有不为NULL的列都相等 如果任何不为NULL的列不相等 如果所有列都为空 输入和输出示例: Inn: 'NO', NULL, 'GB', 'NO', 'NO' Out: 1) FALSE; 2) TRUE; 3) FALSE ---- Inn: 'NO', NULL, 'NO', 'NO', 'NO' Out: 1) TRUE; 2) FALSE; 3) FALSE ---- Inn: NULL, NULL, NULL, NULL, NULL Out: 1) FA
Inn: 'NO', NULL, 'GB', 'NO', 'NO'
Out: 1) FALSE; 2) TRUE; 3) FALSE
----
Inn: 'NO', NULL, 'NO', 'NO', 'NO'
Out: 1) TRUE; 2) FALSE; 3) FALSE
----
Inn: NULL, NULL, NULL, NULL, NULL
Out: 1) FALSE; 2) FALSE; 3) TRUE
我需要测试的列数相当多,因此比较每个列的逻辑语句有点麻烦
系统:Teradata SQL数据库您将使用一个
大小写
表达式。也许:
select (case when a is null and b is null and c is null and d is null
then 'all null'
when coalesce(a, b, c, d) = coalesce(b, c, d, a) and
coalesce(a, b, c, d) = coalesce(c, d, b, a) and
coalesce(a, b, c, d) = coalesce(d, a, b, c)
then 'all non-nulls are equal'
else 'unequal'
end);
是否要逐行检查每列结果?也许您可以使用case语句使其工作?因为您(如建议的)有相对较多的列,所以我将尝试将每条记录透视到一个列表中,并对其执行操作。是的,如果您的原始表有数百万条记录,这可能会变得非常昂贵,但是构建
案例
结构的替代方案将占用您的睡眠时间。在讨论这个问题之前,我会想很多次。我不理解你们的第二个测试(结合)。如果a、b、c和d中的任何一个为null,则合并它们将导致null。我想这是为了检查任何非null匹配,但是这个测试只有在所有4个都不是null时才有效吗?@Andrew。相反。若a、b、c、d中的任何一个都不为null,则合并将不为null。coalesce()
只有当所有的都为空时才会为空。哦,天啊,不知怎么的,我设法看到并写入了coalesce
,但我认为concat
。一定是度假的时间了。。。