2012-05-24 13 views
9

से हटाएं मेरे पास एक दृश्य है। मैं इससे केवल विशिष्ट रिकॉर्ड कैसे प्रदर्शित कर सकता हूं। 1 9 कॉलम हैं। मैं बिना किसी डुप्लिकेट के एकल में सभी प्रदर्शित करना चाहता हूं, और मैं डुप्लीकेट को हटाना नहीं चाहता हूं। मुझे केवल उद्देश्य देखने के लिए इसकी आवश्यकता है।डुप्लिकेट रिकॉर्ड को

 SELECT DISTINCT([Complaint Number]),[Complaint_For],[Total_Complaint_Qty] 
     ,[Defects],[Customer Code ],[Location],[CutomerName],[KUNUM],[QMNUM] 
     ,[Responsible_KAM] 
     FROM [CCCMPREPOSITORY].[dbo].[VW_Final_] 

यदि मैं पिछली क्वेरी का उपयोग करता हूं तो यह 1000 रिकॉर्ड्स देता है। लेकिन अगर मैं निम्नलिखित क्वेरी का उपयोग करता हूं तो यह डुप्लिकेट के बिना सटीक रिकॉर्ड देता है। लेकिन मैं सभी स्तंभों को प्रदर्शित करना चाहता हूं।

 SELECT DISTINCT([Complaint Number]) 
     FROM [CCCMPREPOSITORY].[dbo].[VW_Final_] 

उत्तर

12

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

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

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

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

की मदद करना आसान होगा, एक तरफ, अपने कॉलम और टेबल/दृश्यों का नाम बदलने पर विचार करें। ऑब्जेक्ट नामों में रिक्त स्थान घृणित हैं। – GarethD

+1

धन्यवाद .. यह 100% काम कर रहा है .. –

+0

जीनियस जीनियस ... –

0

distinct के लिए () प्रयोग नहीं करते। बस का उपयोग करें:

select distinct col1, col2 .. from your_table 
+0

यह एक ही परिणाम देगा .. –

+0

संभव नहीं है, उपरोक्त क्वेरी को आपकी तालिका से सभी विशिष्ट मानों का उत्पादन करना चाहिए। कुछ डेटा पोस्ट करें, – Diego

1

प्रयास करें:

SELECT [Complaint Number], MAX([Complaint_For]), MAX([Total_Complaint_Qty]), ... 
FROM [CCCMPREPOSITORY].[dbo].[VW_Final_] 
GROUP BY Complaint Number 
संबंधित मुद्दे