2017-02-16 103 views
0

我正在將數據拉到一個表中,該表中有兩個數據集的數據加載到臨時表並最終插入到表中。有2個記錄是重複的,但我需要兩個記錄,如果他們的值在一列是相同的,否則刪除它。 col1和COL4是主鍵如何刪除表中的重複值

col1 col2 col3 col4 
-------------------- 
a  ab abc x 
a  ab abc y 
b  ab abc y 
b  ab abc z 

我想是忘了第2欄和COL3,檢查COL1如果第1行和第2行是相同的,應該去檢查COL4如果ROW1和第2行是不同的它應該即使col4中的第2行和第3行相同,也會同時顯示第1行和第2行。所以如果記錄正如我提到的那樣,它應該允許所有4個值,但是用我寫的邏輯返回row1,row3,row4,因爲它正在考慮col1的row2和row3與col4的第2行第3行,並且只顯示3記錄,但我想要所有記錄。請幫助我如何在這種情況下在sql中編寫邏輯。

+0

要要清楚,你有4列主鍵?!我會建議關於這個表的設計的問題。 – Schwern

+0

col 1和col 4是主鍵 – Gee

+2

請添加所需的結果 – McNets

回答

0

基於我從你的問題的理解,你可以做這樣的事情..

DELETE i 
FROM YourTable i INNER JOIN 
( 
SELECT col1,col4 
FROM YourTable 
GROUP BY col1,col4 
HAVING count(col2)>1 
) t ON t.col1 = i.col1 AND t.col4 = i.col4 

Live Demo Here

或者,如果歐想只保留一個記錄和刪除其他重複的記錄,你可以做這樣的..

;with cte as 
(
    SELECT *,row_number() over(partition by col1,col4 order by col1,col4) as rn 
    FROM YourTable 
) 

DELETE from cte where rn>1 

Live Demo Here