2013-10-18 73 views
1

我想將一些現有數據轉移到新的數據表中。從表中選擇重複鍵值組合的第一個值

我有表具有取代: - ID - currentItemId - formerItemId - 內容識別

對於相同的內容有可能我有組合currentItemId和formerItemId多個條目。

讓我告訴它的現在:

ID_T1 currentItemId   formerItemId contentId 
1 100   200   300 
2 100   200   301 
3 100   200   302 
4 105   201   303 
5 105   201   304 
6 110   205   320 
7 111   206   321 
8 120   204   322 
9 130   208   323 
10 130   208   324 

現在,我想選擇TOP ID爲每個組合formerItemId和currentItemId:

ID ID_T1 contentId 
1 1 300 
2 1 301 
3 1 302 
4 4 303 
5 4 304 
6 6 320 
7 7 321 
8 8 322 
9 9 323 
10 9 324 

兩個表還包含時間戳和其他一些數據 - 我沒有列入這個例子,以便更容易理解。

我嘗試了自我連接(沒有成功),嵌套選擇(給了我正確的價值爲原始組合,但它不重複,它給了我其他記錄ID爲NULL),但似乎沒有任何工作。試過這樣的事情:

SELECT di1.ID, 
    (SELECT TOP(1) di1.ID 
     FROM TABLE 
     WHERE 
     di1.currentItemtId = di2.currentItemtId AND di1.formerItemId = di1.formerItemId 
     ) AS repeat 
    ,di2.deleteItemId 
    ,di1.currentitemtId 
    ,di1.formerItemId 
    ,di1.contentId 

    FROM Table di1 
    LEFT JOIN 
    Table di2 ON di1.ID = di2.ID 

但是這種方式ID不會重複 - 我得到的ID與普通select相同的值。

我正在使用SQL Server 2008.

任何幫助將不勝感激。

回答

2

請嘗試:

SELECT 
    MIN(ID) OVER (PARTITION BY currentItemId, formerItemId) ID, 
    currentItemId, 
    formerItemId, 
    contentId 
FROM YourTable 

SELECT 
    ID, 
    MIN(ID) OVER (PARTITION BY currentItemId, formerItemId) ID_T1, 
    contentId 
FROM YourTable 
+0

嗨!感謝您的回答:我給出了一些關於gow的錯誤信息,我應該選擇:P我編輯了第二個包含結果的表格。 – CyberHawk

+0

請檢查添加的第二個答案。 – TechDo

+0

非常感謝您的幫助! Upvoted並標記爲答案。 – CyberHawk

相關問題