我只能从以下SQL中选择CompanyId
列;
select CompanyId,
row_number() over (partition by [GradeName] order by [TankNumber] ) rn
from [Data_DB].[dbo].[Company] where CompanyCode='ASAAA'
在SQL中,我尝试找出重复的记录,然后从另一个表中,根据上述查询中的CompanyId
删除一些记录。
即;
delete from [[dbo].ObservationData
where CompanyId in (select CompanyId,
row_number() over (partition by [GradeName] order by [TankNumber] ) rn
from [Data_DB].[dbo].[Company] where CompanyCode='ASAAA')
如何修改以上查询?
答案 0 :(得分:3)
假设您不在乎保留或删除哪些重复项,则可以尝试在此处使用可删除的CTE:
WITH cte AS (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY [GradeName] ORDER BY [TankNumber]) rn
FROM [Data_DB].[dbo].[Company]
WHERE CompanyCode = 'ASAAA'
)
DELETE
FROM cte
WHERE rn > 1;
此答案任意保留“第一个”重复项,第一个定义为具有最早行号的记录。
答案 1 :(得分:0)
delete from [[dbo].ObservationData
where CompanyId in (select CompanyId from (select CompanyId,
row_number() over (partition by [GradeName] order by [TankNumber] ) rn
from [Datat_DB].[dbo].[Company] where CompanyCode='ASAAA') a where rn > 1 ;