आपके पास कुछ/सभी शिकायत नंबरों के लिए डुप्लीकेट रिकॉर्ड होने चाहिए, इसलिए 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
. के भीतर आपकी आवश्यकताओं के अनुरूप कार्य करें।