是否根据另一列的信息删除SQL server中一列中的重复数据



尝试删除SSMS中多个列的连接中的重复项,并添加基于另一列的额外条件。基本上,试图查看输入日期、ID、课程、类型的相同CONCAT是否出现不止一次,如果出现,则删除状态=撤回的条目

课程类型退出继续继续撤回>撤回>继续
输入日期 ID状态
2021年1月5日 1234 NS02 FT
2021年1月5日 1234 NS02 FT
2022年9月18日 2345 AC00 PT
2021年12月20日 2345 AC00 FT
2020年6月30日 4567FS03FT
2020年6月30日 4567FS03FT

我想我可能已经对它进行了排序:'(如果我使用问题中的脚本,我会获得concat:后所有重复数据的列表

SELECT CONCAT([Date Entered],[ID],[Course],[Type]) as concatfields, 
COUNT(*)  AS No
INTO WIP.[Concat]
FROM [RAW].[Course_Info] 
GROUP BY CONCAT([Date Entered],[ID],[Course],[Type])
HAVING COUNT(*) >1

然后回到主表,我可以在最后添加一个过滤器(在任何其他排除之后(:

[...]
EXCEPT SELECT * FROM [RAW].[Course_Info]   
WHERE (([Date Entered],[ID],[Course],[Type])  IN (SELECT concatfields from WIP.[Concat]
AND [Status]  like '%Withdrawn%')

这并不是最漂亮的方式,但这恰恰消除了需要的东西。同时,我之前尝试进行以下排除,在我的大样本中成功地删除了比必要的多得多的内容(我相信它排除了所有"撤回"条目(:

AND (
CONCAT([Date Entered],[ID],[Course],[Type]) NOT IN (SELECT concatfields from WIP.[Concat]) 
AND [Aim Completion Status] NOT LIKE '%Withdrawn%')

最新更新