gpt4 book ai didi

sql - 在同一行的不同列中查找重复值

转载 作者:行者123 更新时间:2023-12-04 12:43:25 25 4
gpt4 key购买 nike

在有人提示这个表应该被规范化、最佳实践等之前。我要承认这是我们在 SQL Server 2008 R2 中的一个旧表,我不能做任何改变它的事情。话虽如此,该表具有以下列:

"PreparedBy", "PrelimApprovalBy", "Approval1Signer", "Approval2Signer" 

所有这些字段都有用户名或NULL 或''。我想获取在上面提到的 2 个或更多字段中出现相同用户名的所有行。如果 2 个字段为 NULL,则它们是 不是 一场比赛,他们是 不是 如果它们都是 '' 则匹配。因此 NULL 和 '' 都需要排除,因为它们没有任何意义。

这是我到目前为止的想法,但我不喜欢它:
我正在考虑通过执行以下操作来检查 WHERE 子句中的所有排列(检查 NULL 和 '')
WHERE PreparedBy =  PrelimApprovalBy OR PreparedBy = Approval1Signer OR ...

必须有更好的方法来做到这一点。

最佳答案

这是一个:

SELECT * FROM T
WHERE EXISTS
(SELECT 1
FROM (VALUES
(PreparedBy)
,(PrelimApprovalBy)
,(Approval1Signer)
,(Approval2Signer)) AS X (n)
WHERE NULLIF(n, '') IS NOT NULL
GROUP BY n
HAVING COUNT(*)>1
)

基本上,对于每一行,我们正在构建一个包含不同行中的列值的迷你表,并执行 GROUP BY 和 HAVING 来检查匹配值的组。 NULLIF 帮助我们忽略 '' 值(使它们为 NULL,然后排除所有 NULL)。

关于sql - 在同一行的不同列中查找重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17555038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com