sql - 检查十个字段中的任何两个是否不同(不为 NULL 或等于)
问题描述
我有一个包含(除其他外)十个字段的 SQL 查询,称它们为 v1、...、v10,我想对其进行测试。预期的情况是大多数为 NULL,其余的值都相等。我正在寻找的有趣(错误?)情况是至少有两个不相等的非 NULL 值。
有没有比这更好的方法
v1 != v2 or v1 != v3 or ... v8 != v9 or v8 != v10 or v9 != v10
二项式 (10, 2) = 总共 45 个条件?
除了不优雅之外,它似乎很脆弱——而且刚刚调试了一个问题,即长列表中的一个变量有错字,而不仅仅是学术问题。但是,如果这是唯一可行的方法……尽管如果列表扩展到 20 则就不那么好了。
解决方案
UNPIVOT
列到行,然后是GROUP BY
您的主键和未透视列中COUNT
的DISTINCT
值,以查看是否有多个唯一值:
甲骨文 11 设置:
CREATE TABLE table_name ( id, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10 ) AS
SELECT 1, 'A', 'A', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL FROM DUAL UNION ALL
SELECT 2, 'A', NULL, 'B', NULL, NULL, NULL, NULL, NULL, NULL, NULL FROM DUAL UNION ALL
SELECT 3, 'A', NULL, 'A', 'A', NULL, 'A', 'A', 'A', 'A', 'A' FROM DUAL UNION ALL
SELECT 4, 'A', NULL, 'A', 'A', 'B', NULL, NULL, NULL, NULL, NULL FROM DUAL;
查询:
SELECT id
FROM table_name
UNPIVOT ( value FOR name IN ( c1, c2, c3, c4, c5, c6, c7, c8, c9, c10 ) )
GROUP BY id
HAVING COUNT( DISTINCT value ) > 1
输出:
| 身份证 | | -: | | 2 | | 4 |
db<>在这里摆弄
推荐阅读
- android - 我无法将我的项目与 gradle 同步?
- node.js - 如何使用 Azure DevOps 管道运行 LUIS 调度模型的刷新
- c# - 切换 OnValueChanged 没有可用的功能
- excel - 两个 Excel 文件的排序不同
- java - 如何在同一主题上使用 globalKtable 和 StateStore?
- mysql - 选择列值等于某个值的所有可能的列值
- deep-learning - 使用 PyTorch 将训练数据集拆分为 CIFAR10 的训练集和验证集后,如何增加数据?
- sharepoint - 错误:将查找字段添加到列表时,“对象在与对象关联的上下文不同的上下文中使用”
- swift - 如何使用 SwiftUI 在 iPhone 上显示弹出视图,就像在 iPad 上一样?
- uwp - 如何在 UWP 中检测用户空闲?