मुझे सीटीई और ROW_NUMBER
पसंद हैं चूंकि दोनों संयुक्त हमें यह देखने की अनुमति देते हैं कि कौन सी पंक्तियां हटाई गई हैं (या अपडेट की गई हैं), इसलिए बस DELETE FROM CTE...
बदलें करने के लिए SELECT * FROM CTE
:
WITH CTE AS(
SELECT [col1], [col2], [col3], [col4], [col5], [col6], [col7],
RN = ROW_NUMBER()OVER(PARTITION BY col1 ORDER BY col1)
FROM dbo.Table1
)
DELETE FROM CTE WHERE RN > 1
डेमो (परिणाम अलग है; मुझे लगता है कि यह आपकी ओर से एक टाइपो के कारण है)
COL1 COL2 COL3 COL4 COL5 COL6 COL7
john 1 1 1 1 1 1
sally 2 2 2 2 2 2
यह उदाहरण एकल कॉलम col1
. द्वारा डुप्लिकेट निर्धारित करता है PARTITION BY col1
. के कारण . यदि आप एक से अधिक कॉलम शामिल करना चाहते हैं तो बस उन्हें PARTITION BY
. में जोड़ें :
ROW_NUMBER()OVER(PARTITION BY Col1, Col2, ... ORDER BY OrderColumn)