一個簡單的問題是,如何使用PK獲取一組記錄,併爲每個源創建兩個完全相同的記錄,併爲該重複項稍微更改一個鍵?換句話說,我記錄了4000條記錄,並且產生了8000條記錄,其中4000條是相同的,而另外4000條記錄的關鍵字稍有改動。我不能做一個聯盟,因爲這基本上是兩個選擇(長篇故事)。SQL:需要爲每個單獨的記錄創建兩個唯一的記錄
其餘的變得複雜,但可能需要提供示例。
這是我原來的集(它包含了超過4000條記錄)
dateGroup areaGroup itemID editionID
1 1 1 1
1 1 1 2
1 2 1 1
1 2 2 1
2 1 1 1
2 1 1 2
2 2 1 1
2 2 1 2
對於每一個記錄,我需要創建一個重複的記錄下勾搭的areaGroups一起「0」,然後創建一個逗號原來的分隔列表areaGroups作爲一個單獨的字段。 (「爲什麼」是一些愚蠢的程序員(我)在15年前犯了一個錯誤)。我可以根據需要重新編號editionID,但是原始和重複記錄必須具有相同的editionID(因此爲什麼工會不工作) 。在PK仍然與上面相同(各領域)
dateGroup areaGroup itemID editionID aGroups
1 0 1 1 1
1 0 1 2 1
1 0 1 1 2 // Duplicate (EditionID)
1 0 2 1 2
2 0 1 1 1
2 0 1 2 1
2 0 1 1 2 // Duplicate (EditionID)
2 0 1 2 2
根據需要作記錄獨特的最終結果將重新編號editionID。
dateGroup areaGroup itemID editionID aGroups (EditionID is what is altered)
1 0 1 1 1
1 0 1 2 1
1 0 1 2 2 1 changed to 2 (one more than row 1)
1 0 2 1 2
2 0 1 1 1
2 0 1 2 1
2 0 1 2 2 1 changed to 2 (one more than row 1)
2 0 1 2 2
1 1 1 1
1 1 1 2
1 2 1 2 1 changed to 2 (editionID) to match
1 2 2 1
2 1 1 1
2 1 1 2
2 2 1 2 1 changed to 2 to match above
2 2 1 2
我知道你可以計算editionID像一排秩,像這樣:
select row_number() over (
partition by dateGroup, itemID
order by dateGroup, itemID) as editionID
因此,所有我需要的是知道如何從一組
很難正確理解你想要的東西。你說每行應該有一個重複,但在你的例子中,你只有兩個重複。你能從樣本數據中準確地列出你想要的結果嗎? aGroups應該是原來的1和2的副本? 「1比1排」意味着什麼? – Rory 2010-12-17 17:27:44
第三個例子是我期望的結果。 0組的areaGroup將areaGroup值移至aGroups值(逗號分隔的集合,但只有一個值)。從本質上講,唯一的困難是如果我們需要更改editionID以使其具有唯一性,那麼我們需要在原始列表中反映該版本的更改。我沒有看到我們怎麼能做到這一點,沒有從一套(沒有聯盟)開始。 – 2010-12-17 17:48:13
你很難理解你想要什麼。你爲什麼要'重新編號'EditionID?你能準確地說出你想如何計算'重新編號'的EditionID嗎?你說'原始和重複記錄必須有相同的editionID',但是你想重新編號嗎?在您的示例輸出中,很難確定哪些行與哪些原始行相關。也許放一個'OriginalRowId'列來澄清這一點。 – Rory 2010-12-23 14:02:38