我正在SQLServer中的一个项目中使用3个不同的条件创建审计数据库。这3个独立的查询每个都按照我希望的方式工作,并用于填充各自的temp表。从那以后,我使用了一个联合将这3个合并到一个最终的聚合临时表中。我遇到的问题是,我的一些条目满足多个初始查询的条件,从而创建了重复项。我想删除这些重复,但也能够记录的条目出现在多个基地。
SELECT * INTO #all_audits FROM
(SELECT * FROM #audita
UNION ALL
SELECT * FROM #auditb
UNION ALL
SELECT * FROM #auditc) as tmp
我首先在每个初始temp表中添加一列,其中包含审计的名称。这项工作毫无悬念地成功了,能够向工会说明情况。现在我在想应该为audittype2添加另一个列,以记录条目被标记的第二个审计,但我不太确定如何进行。我知道更新集序列可能适用于我正在考虑的当前格式。
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)
2条答案
按热度按时间68bkxrlz1#
如果我正确理解了你的要求,你想设置一个新的栏目吗
auditType2
在其primary_key
不是唯一的。如果是这样,您可以使用窗口函数和可更新的cte:
yxyvkwin2#
我建议将表创建为:
这会将所有审核连接在一起,因此不会假定“主键”仅在一个审核中。