sql - SQL Server - 如何记录哪些条目是重复的?
问题描述
我正在 SQL Server 中开展一个项目,以根据 3 个不同的标准创建审计数据库。这 3 个单独的查询每个都完全按照我想要的方式工作,并用于填充各自的临时表。从那以后,我使用联合将这 3 个合并到一个最终的聚合临时表中。我遇到的问题是我的一些条目符合我的多个初始查询的标准,从而创建了重复项。我想删除这些重复项,但也能够记录条目出现在多个基础上。
SELECT * INTO #all_audits FROM
(SELECT * FROM #audita
UNION ALL
SELECT * FROM #auditb
UNION ALL
SELECT * FROM #auditc) as tmp
我首先在每个初始临时表中添加一个带有审计名称的列。这很顺利,可以告诉工会。现在我在想我应该为审计类型 2 添加另一列,以记录标记条目的第二次审计,但我不太确定如何去做。我知道更新集序列可能适用于我正在考虑的当前格式。
ALTER TABLE #all_audits ADD AuditType2 varchar(255)
上面的每个表都共享相同的主键。每个表还有一个“AuditType”列,用于标记它们来自哪个审计。
现在这可能很简单,但是实际执行该匹配并仍然删除重复项的代码是我卡住的地方。像这样的东西?
UPDATE #all_audits
SET AuditType2 = AuditType
FROM #all_audits
WHERE Primary_Key IN
(SELECT Primary_Key
FROM #all_audits
GROUP BY Primary Key HAVING COUNT(*)>1)
解决方案
如果我正确理解您的要求,您希望在不唯一auditType2
的行上设置新列。primary_key
如果是这样,您可以使用窗口函数和可更新的 cte:
with cte as (
select auditType, auditType2, count(*) over(partition by primary_key) cnt
from #all_audit
)
update cte set auditType2 = auditType where cnt > 1
推荐阅读
- php - 访问 WC() 以在 ajax 回调中获取购物车内容
- swift - 我在哪里可以找到媒体按钮以将我的资产放到情节提要中
- oop - 支持字段公开时自动生成getter和setter的目的是什么
- python - Django中的简单查询
- java - ncpu.s 文件加载到错误的 'utf-8' android studio
- c# - .netcore Web 应用程序因“提供给函数的缓冲区太小”错误而失败
- javascript - 解析浮点数和 toFixed()
- angular - 以角度 6 显示 Spinner 直到 API 响应
- unity3d - 广告未在 Game Unity 上展示
- php - 来自 WordPress 元字段的数组中的名称键