2013-04-10 35 views
0

我有有一些重複的行,我能找到複製了出來,看起來像這樣刪除值

CREATE TABLE Holder 
(
    HPKEY INT, 
    HSOMEVALUE VARCHAR(50) 
); 

INSERT INTO HOLDER (HPKEY,HSOMEVALUE) 
VALUES 
(1,'abc'), 
(2,'abc'), 
(5,'abc'), 
(7,'xyz'), 
(9,'xyz') 

,現在我已經得到的結果集爲表這種格式

Somvalue   MINKEY   OTHER_KEYS_EXCEPT_MIN 
abc    1    2,5 
xyz    7    9 

,但我得到的第三列的所有鑰匙。

我爲此創建了SQLFIDDLER

回答

1
DECLARE @Holder TABLE 
(
    HPKEY INT, 
    HSOMEVALUE VARCHAR(50) 
); 

INSERT INTO @HOLDER (HPKEY,HSOMEVALUE) 
VALUES 
(1,'abc'), 
(2,'abc'), 
(5,'abc'), 
(7,'xyz'), 
(9,'xyz'); 

SELECT SomeValue = HSOMEVALUE, 
    MINKEY = m, 
    OTHER_KEYS_EXCEPT_MIN = STUFF((SELECT ',' + RTRIM(HPKEY) 
     FROM @Holder AS h2 WHERE HSOMEVALUE = h.HSOMEVALUE 
     AND HPKEY <> m FOR XML PATH, TYPE 
    ).value('.[1]', 'nvarchar(max)'), 1, 1, '') 
FROM (SELECT HSOMEVALUE, m = MIN(HPKEY) 
FROM @Holder GROUP BY HSOMEVALUE) AS h 
ORDER BY SomeValue;