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

SQL सर्वर में डुप्लिकेट पंक्तियाँ हटाएं

निम्न उदाहरण SQL सर्वर में डुप्लिकेट पंक्तियों को हटाने के लिए T-SQL का उपयोग करता है।

अधिक विशिष्ट होने के लिए, यह डुप्लिकेट पंक्तियों को हटा देता है लेकिन एक रखता है। तो यदि आपके पास दो समान पंक्तियां हैं, तो यह उनमें से एक को हटा देती है और दूसरी को रखती है। दूसरे शब्दों में, यह तालिका को धोखा देता है।

नमूना डेटा

मान लीजिए हमारे पास निम्न डेटा वाली एक तालिका है:

SELECT * FROM Pets;

परिणाम:

+---------+-----------+-----------+
| PetId   | PetName   | PetType   |
|---------+-----------+-----------|
| 1       | Wag       | Dog       |
| 1       | Wag       | Dog       |
| 2       | Scratch   | Cat       |
| 3       | Tweet     | Bird      |
| 4       | Bark      | Dog       |
| 4       | Bark      | Dog       |
| 4       | Bark      | Dog       |
+---------+-----------+-----------+

हम देख सकते हैं कि पहली दो पंक्तियाँ डुप्लीकेट हैं, जैसा कि अंतिम तीन पंक्तियाँ हैं।

डुप्लिकेट चुनें

तालिका को डी-डुप्लिकेट करने से पहले, हम निम्न क्वेरी का उपयोग करके देख सकते हैं कि कौन सी पंक्ति/पंक्तियों को हटा दिया जाएगा:

WITH CTE AS 
    (
        SELECT 
            *, 
            ROW_NUMBER() OVER ( 
                PARTITION BY PetId, PetName, PetType 
                ORDER BY PetId, PetName, PetType
                ) AS Row_Number
        FROM Pets
    )
SELECT * FROM CTE WHERE Row_Number <> 1;

परिणाम:

+---------+-----------+-----------+--------------+
| PetId   | PetName   | PetType   | Row_Number   |
|---------+-----------+-----------+--------------|
| 1       | Wag       | Dog       | 2            |
| 4       | Bark      | Dog       | 2            |
| 4       | Bark      | Dog       | 3            |
+---------+-----------+-----------+--------------+

डुप्लिकेट हटाएं

डुप्लिकेट मानों को हटाने के लिए, हम SELECT * . को बदलकर उपरोक्त क्वेरी को संशोधित कर सकते हैं अंतिम पंक्ति पर DELETE . के साथ :

WITH CTE AS 
    (
        SELECT 
            *, 
            ROW_NUMBER() OVER ( 
                PARTITION BY PetId, PetName, PetType 
                ORDER BY PetId, PetName, PetType
                ) AS Row_Number
        FROM Pets
    )
DELETE FROM CTE WHERE Row_Number <> 1;

परिणाम:

(3 rows affected)

तालिका को अब डी-डुप्लिकेट कर दिया गया है।

हम सभी पंक्तियों को फिर से चुनकर इसे सत्यापित कर सकते हैं:

SELECT * FROM Pets;

परिणाम:

+---------+-----------+-----------+
| PetId   | PetName   | PetType   |
|---------+-----------+-----------|
| 1       | Wag       | Dog       |
| 2       | Scratch   | Cat       |
| 3       | Tweet     | Bird      |
| 4       | Bark      | Dog       |
+---------+-----------+-----------+

जैसा कि अपेक्षित था, हमारे कुत्ते "वाग" के लिए डुप्लिकेट पंक्तियों में से एक को हटा दिया गया है और दूसरा बना हुआ है। "बार्क" के लिए दो डुप्लिकेट पंक्तियों को भी हटा दिया गया है। तालिका को सफलतापूर्वक डी-डुप्लिकेट कर दिया गया है।


  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. SQL सर्वर एकाधिक पंक्ति प्रविष्टियों पर काम करने के लिए एक ट्रिगर

  3. बीसीपी उपयोगिता और एसक्यूएल सर्वर 2008 का उपयोग करके कॉलम हेडर (कॉलम नाम) के साथ फाइल करने के लिए निर्यात तालिका

  4. SQL सर्वर में किसी स्ट्रिंग की सभी घटनाओं को किसी अन्य स्ट्रिंग से कैसे बदलें - REPLACE ()

  5. SQL सर्वर स्लीप के समतुल्य ():WAITFOR स्टेटमेंट