日期:2014-05-17  浏览次数:20526 次

关于SQL删除重复数据的问题
本帖最后由 cuibty 于 2012-11-25 12:15:50 编辑
想要实现的效果就是以字段 证书号 检查重复并且只保留一条以 VIP价 最小的记录 如果重复的数据中 VIP价 一样就保留 ID 小的记录。

帮助写一条SQL语句,谢谢!

DELETE  dbo.Diamond
    WHERE   证书号 IN ( SELECT 证书号
                     FROM   Diamond
                     GROUP BY 证书号
                     HAVING COUNT(证书号) > 1 )
            AND VIP价 NOT IN ( SELECT    MIN(VIP价)
                              FROM      Diamond
                              GROUP BY  证书号
                              HAVING    COUNT(证书号) > 1 )

想实现的效果如下:

TABLE Diamond

ID    证书号    VIP
1     10000     7.1 
2     10000     7.2
3     10000     7.3
4     10000     7.1
---------------
ID    证书号    VIP
1     10000     7.1 
------解决方案--------------------
delete Diamond from Diamond a 
where exists
(
select 1 from Diamond b 
where a.证书号=b.证书号 
and (b.vip<a.vip or (b.vip=a.vip and b.id<a.id)) 
)
 
------解决方案--------------------

IF(OBJECT_ID('TA','U') IS NOT NULL) DROP TABLE TA 
CREATE TABLE TA( ID INT,Number VARCHAR(10),VIP FLOAT)
INSERT INTO TA
SELECT 1,'10000',7.1 UNION ALL
SELECT 2,'10000',7.2 UNION ALL
SELECT 3,'10000',7.3 UNION ALL
SELECT 4,'10000',7.1  
--删除语句
DELETE FROM TA  
WHERE EXISTS(
 SELECT ID, Number,VIP FROM TA AS A
 WHERE TA.Number=A.Number AND TA.VIP=A.VIP AND TA.ID>A.ID
)
--查看结果
SELECT * FROM TA 

ID          Number     VIP
----------- ---------- ----------------------
1           10000      7.1
2           10000      7.2
3 &nb