删除重复项

时间:2014-08-14 12:15:14

标签: sql-server-2008-r2

我有一张如下表:

SuppID   AreaID     SuppNo   SupName    SupPrice
------------------------------------------------
1        3            526    ANC         100 
1        3            985    JTT         200
3        4            100    HIK         300 

在上表中,对于相同的SuppID(1)和相同的AreaID(3),在两个不同的行中存在不同的SuppNo(526& 985)。

在这种情况下,我想将这两行放入一行,其中SuppNo字段为空白。

此外,我的输出结果应显示包含所有列的行。

任何帮助?

1 个答案:

答案 0 :(得分:0)

这应该让你开始:

 DECLARE @TABLE TABLE (SuppID INT, AreaID INT, SuppNo VARCHAR(5), SupName VARCHAR(5), SupPrice INT)
INSERT INTO @TABLE
SELECT 1,3,'526','ANC',100 UNION
SELECT 1,3,'985','JTT',200 UNION
SELECT 3,4,'100','HIK',300 

-- select data before updates
SELECT * FROM @TABLE

-- add a row count by AreaID/SuppID
;WITH T1 AS
(
SELECT *
       ,SUM(1) OVER(PARTITION BY AREAID,SUPPID) AS ROWCNT
FROM @TABLE
)

-- set the SuppNo blank on rows that have more than 1 match
UPDATE T1 SET SuppNo='' WHERE ROWCNT>1

-- add a row # by AreaID/SuppID
;WITH T2 AS 
(
SELECT *
       ,ROW_NUMBER() OVER(PARTITION BY AREAID,SUPPID ORDER BY AREAID,SUPPID) AS ROWID
FROM @TABLE
)

-- delete duplicate rows    
DELETE 
FROM T2
WHERE ROWID>1

-- select data after updates    
SELECT * FROM @TABLE