Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर 2008:डुप्लिकेट पंक्तियों को हटाएं

आप DELETE कर सकते हैं एक सीटीई से:

WITH cte AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY uniqueid ORDER BY col2)'RowRank'
             FROM Table)
DELETE FROM cte 
WHERE RowRank > 1

ROW_NUMBER() फ़ंक्शन प्रत्येक पंक्ति को एक संख्या निर्दिष्ट करता है। PARTITION BY उस समूह में प्रत्येक आइटम के लिए नंबरिंग ओवर शुरू करने के लिए उपयोग किया जाता है, इस मामले में uniqueid का प्रत्येक मान 1 से नंबर देना शुरू करेंगे और वहां से ऊपर जाएंगे। ORDER BY निर्धारित करता है कि संख्याएं किस क्रम में आती हैं। चूंकि प्रत्येक uniqueid 1 से शुरू होकर क्रमांकित हो जाता है, ROW_NUMBER() . के साथ कोई भी रिकॉर्ड 1 से अधिक में एक डुप्लीकेट uniqueid है

कैसे ROW_NUMBER() . को समझने के लिए फ़ंक्शन काम करता है, बस इसे आज़माएं:

SELECT *,ROW_NUMBER() OVER(PARTITION BY uniqueid ORDER BY col2)'RowRank'
FROM Table
ORDER BY uniqueid

आप ROW_NUMBER() . के तर्क को समायोजित कर सकते हैं यह समायोजित करने के लिए कार्य करता है कि आप कौन सा रिकॉर्ड रखेंगे या हटाएंगे।

उदाहरण के लिए, शायद आप इसे कई चरणों में करना चाहते हैं, पहले एक ही अंतिम नाम लेकिन अलग-अलग प्रथम नामों वाले रिकॉर्ड हटाना, आप PARTITION BY में अंतिम नाम जोड़ सकते हैं :

WITH cte AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY uniqueid, col3 ORDER BY col2)'RowRank'
             FROM Table)
DELETE FROM cte 
WHERE RowRank > 1


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डेबेज़ियम:डेटाबेस में कोई अधिकतम एलएसएन दर्ज नहीं किया गया; कृपया सुनिश्चित करें कि SQL सर्वर एजेंट चल रहा है

  2. तालिका चर CTE में डालें

  3. जांचें कि क्या तालिका में OBJECTPROPERTY () के साथ SQL सर्वर में टाइमस्टैम्प कॉलम है

  4. आशावादी संगामिति:IsConcurrencyToken और RowVersion

  5. SQL सर्वर स्ट्रिंग या बाइनरी डेटा को छोटा कर दिया जाएगा