2013-07-09 27 views
1

在MSSQL表中我有3列。我有多个KeptValue s重复。我需要删除所有重复项并保留1.但是我需要保留花费最多的那个。
我创建了2个视图。重复保存的值列表VW_DUPLICATE1删除MSSQL中的重复项

回答

-1

您可以通过废

+0

为什么downvote? – Alicia

+0

我认为他的意思是删除重复,而不是通过使用“Group By”忽略它们。 –

+0

谢谢,是的,也许我没有说清楚。很高兴知道你为什么得到一个downvote,所以你可以学习下一次! – Alicia

2
delete t1 
from your_table t1 
left join 
(
    select keptvalue, max(spent) as mSpent 
    from your_table 
    group by keptvalue 

) t2 on t1.keptvalue = t2.keptvalue and t1.spent = t2.mSpent 
where t2.mSpent is null 
+2

id在组中没有提及它抛出错误“Column'id'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中” – bvr

+0

@bvr:当然。我错过了。谢谢。 –

0

您可以使用此查询的具体KepValue删除保持最高SPENTgroup by KeptValue和max合计实现这一目标。

DELETE FROM your_table WHERE SPENT < (SELECT MAX(SPENT) FROM your_table WHERE KeptValue='your_value') AND KeptValue='your_value' 
0

试试这个

DELETE FROM tbl WHERE Id IN (
    SELECT Id FROM (
     SELECT 
      Id 
      ,ROW_NUMBER() OVER (PARTITION BY KeptValue ORDER BY SPENT DESC) AS [ItemNumber] 
     FROM 
      tbl 
    ) a WHERE ItemNumber > 1 
) 
+0

@Julian Michael Mostert试试这个给你的req输出 –

0

试试这个

Create table #temp (ID int, KeptValue NVARCHAR(20) , SPENT numeric(18,3)) 

INSERT INTO #temp select 1,'KeptValue1', 20 
INSERT INTO #temp select 2,'KeptValue1', 21 
INSERT INTO #temp select 3,'KeptValue2', 22 
INSERT INTO #temp select 4,'KeptValue2', 20 
INSERT INTO #temp select 5,'KeptValue2', 20 
INSERT INTO #temp select 6,'KeptValue3', 20 
INSERT INTO #temp select 7,'KeptValue3', 23 
INSERT INTO #temp select 8,'KeptValue3', 24 
INSERT INTO #temp select 9,'KeptValue4', 28 
INSERT INTO #temp select 10,'KeptValue4', 23 
INSERT INTO #temp select 11,'KeptValue5', 24 
INSERT INTO #temp select 12,'KeptValue6', 28 

select * FROM #temp 

DELETE 
FROM #temp 
WHERE ID 
in(
    select ID from 
        (SELECT Id, (ROW_NUMBER() OVER(PARTITION BY KeptValue order by SPENT desc)) as R 
        from #temp 
        ) as RowsNm 
    WHERE R >1) 

select * from #temp 


drop table #temp