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

डुप्लीकेट रिकॉर्ड को देखने से हटाएं

आपके पास कुछ/सभी शिकायत नंबरों के लिए डुप्लीकेट रिकॉर्ड होने चाहिए, इसलिए DISTINCT . का उपयोग करें काम नहीं करेगा। एक साधारण तालिका पर विचार करें जैसे

Column1    |    Column2
-----------+------------
A          |    X
A          |    Y

यदि आप कॉलम 1 =ए के लिए केवल एक रिकॉर्ड चाहते हैं, तो एसक्यूएल के पास यह जानने का कोई तरीका नहीं है कि कॉलम 2 में एक्स या वाई रखना है या नहीं। यह वही समस्या है जो आपको हो रही है, लेकिन 19 कॉलम के साथ, 2 नहीं। आपको किसी प्रकार के तर्क को लागू करने की आवश्यकता है कि कैसे तय किया जाए कि प्रत्येक शिकायत संख्या के लिए कौन सी पंक्ति दिखाई देगी। तो उपरोक्त तालिका के लिए यदि मैं चाहता हूं कि X कॉलम 2 में दिखाए, तो मैं निम्नलिखित क्वेरी का उपयोग करूंगा:

SELECT  Column1,
        Column2
FROM    (   SELECT  Column1,
                    Column2,
                    ROW_NUMBER() OVER(PARTITION BY Column1 ORDER BY Column2 ASC) [RowNumber]
            FROM    MyTable
        ) t
WHERE   RowNumber = 1

यहां मैं ROW_NUMBER() . का उपयोग कर रहा हूं प्रत्येक पंक्ति को प्राथमिकता देने के लिए कार्य करता है, फिर केवल सर्वोच्च प्राथमिकता वाले को प्रदर्शित करता है। अगर मुझे परवाह नहीं है कि वे किस क्रम में निकले हैं तो मैं यादृच्छिक पंक्ति चुनने के लिए कुछ इस तरह का उपयोग कर सकता हूं।

ROW_NUMBER() OVER(PARTITION BY Column1 ORDER BY NEWID()) [RowNumber]

चूँकि मुझे नहीं पता कि आपकी क्वेरी पर किस तर्क को लागू करना है, मैं ठीक वही पोस्ट नहीं कर सकता जो आपको चाहिए, लेकिन मैं कोशिश कर सकता हूँ और आपको शुरू कर सकता हूँ:

SELECT  [Complaint Number],
        [Complaint_For],
        [Total_Complaint_Qty],
        [Defects],
        [Customer Code ],
        [Location],
        [CutomerName],
        [KUNUM],
        [QMNUM],
        [Responsible_KAM]
FROM    (   SELECT  [Complaint Number],
                    [Complaint_For],
                    [Total_Complaint_Qty],
                    [Defects],
                    [Customer Code ],
                    [Location],
                    [CutomerName],
                    [KUNUM],
                    [QMNUM],
                    [Responsible_KAM],
                    ROW_NUMBER() OVER(PARTITION BY [Complaint Number] ORDER BY Complaint_For, Defects) AS RowNumber
            FROM    [CCCMPREPOSITORY].[dbo].[VW_Final_]
        ) data
WHERE   RowNumber = 1

आपको बस ORDER BY . के साथ खिलवाड़ करना होगा ROW_NUMBER . के भीतर आपकी आवश्यकताओं के अनुरूप कार्य करें।



  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. एसएसआईएस में कॉलम संरचना कैसे जांचें?

  4. SQL सर्वर में किसी मौजूदा तालिका में एक परिकलित कॉलम जोड़ें

  5. सी # से डेटाबेस को कैसे पुनर्स्थापित करें