2014-02-05 38 views
0

我已經在表中標識了「重複記錄」。雖然,我聲稱他們是重複的,但他們只是PK是一個身份專欄 - 所以他們不是真正的重複(但基於其他專欄 - 他們是)。tsql - 在一行中返回重複的行ID

我目前與以下格式此表中的數據:

ID -> identity column 
Row -> indicates the sequential row number 
RowNumber -> indicates that two of the rows are identical 

例如:

ID Row  RowNumber 
500 1  1000 
501 2  1000 
305 1  1050 
306 2  1050 

我想在單行僅返回ID對每個行號

例如,上述結果集爲:

500 501 
305 306 

有什麼建議嗎?

+3

所以是那些應該出現在單獨的列,或與他們之間的間隔一列? 「Row」的最高值是多少? –

+0

只會有2個重複項,或者會有幾個重複項,所以結果會是幾列寬 – whytheq

+0

它們應該是兩個單獨的列。 – user1411074

回答

0

的一種方法,使用ROW_NUMBEROVER-clause

WITH CTE AS 
(
    SELECT ID,Row,RowNumber, 
     RN = ROW_NUMBER()OVER (PARTITION BY RowNumber 
           ORDER BY Row) 
    FROM CTE 
) 
SELECT ID,Row,RowNumber FROM CTE WHERE RN = 1 

如果你想刪除重複更換SELECT

DELETE FROM CTE WHERE RN > 1 
0
CREATE TABLE #Table 
(
ID   INT, 
"Row"  INT, 
RowNumber INT 
) 

INSERT INTO #Table 
VALUES 
    (500,1,1000), 
    (501,2,1000), 
    (305,1,1050), 
    (306,2,1050) 

CASE語句的工作:

SELECT 
    RowNumber, 
    MAX(CASE WHEN "Row" = 1 THEN ID ELSE NULL END) AS "1", 
    MAX(CASE WHEN "Row" = 2 THEN ID ELSE NULL END) AS "2" 
FROM #Table 
GROUP BY RowNumber 

​​

SELECT 
    RowNumber, 
    "1", 
    "2" 
FROM 
    (SELECT "Row",ID, RowNumber FROM #Table) AS SourceTable 
    PIVOT 
    (
    MAX(ID) 
    FOR "Row" IN ("1","2") 
    ) AS PivotTable 
+0

這工作!非常感謝!! – user1411074

+0

沒問題 - 很高興它有幫助 – whytheq