2012-03-16 23 views
34

मैं जाँच करना चाहते हैं, तो डेटा का एक टुकड़ा एसक्यूएल का उपयोग कर अपनी तालिका में किसी खास कॉलम में एक से अधिक बार दिखाई देता है में एक से अधिक बार दिखाई देता है कि क्या देखें।एक आइटम एक डेटाबेस स्तंभ

select * from AXDelNotesNoTracking where count(salesid) > 1 

salesid स्तंभ मैं के लिए जाँच करने के लिए चाहते हैं, तो किसी भी मदद की सराहना की जाएगी, धन्यवाद: यहाँ क्या मैं अब तक है की मेरी एसक्यूएल कोड है।

+2

क्या एसक्यूएल की विविधता? माई एसक्यूएल? माइक्रोसॉफ्ट SQL सर्वर? आकाशवाणी? पहुंच? आदि – UnhandledExcepSean

उत्तर

80

यह होना चाहिए:

SELECT SalesID, COUNT(*) 
FROM AXDelNotesNoTracking 
GROUP BY SalesID 
HAVING COUNT(*) > 1 

अपने प्रारंभिक क्वेरी के बारे में:

  1. आप ऐसा नहीं कर सकते एक चुनें * के बाद से इस आपरेशन द्वारा एक ग्रुप की आवश्यकता है और स्तंभों या तो ग्रुप द्वारा में होना चाहिए या कुल फ़ंक्शन (यानी COUNT, SUM, MIN, MAX, AVG, आदि)
  2. चूंकि यह एक समूह द्वारा ऑपरेशन है, इसलिए एक हैविंग क्लॉज इसे फ़िल्टर करेगा कहां

संपादित करें:

और मैं सिर्फ इस के बारे में सोचा, यदि आप जो आइटम एक बार से अधिक में देखना चाहते हैं, (लेकिन यह जो डेटाबेस का उपयोग कर रहे पर निर्भर करता है):

;WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY SalesID ORDER BY SalesID) AS [Num] 
    FROM AXDelNotesNoTracking 
) 
SELECT * 
FROM cte 
WHERE cte.Num > 1 

बेशक, यह केवल उन पंक्तियों को दिखाता है जो एक ही बिक्री आईडी के साथ दिखाई दिए हैं लेकिन प्रारंभिक SalesID मान नहीं दिखाते हैं जो एक से अधिक बार प्रकट हुए हैं। मतलब, यदि कोई बिक्री आईडी 3 बार दिखाती है, तो यह क्वेरी उदाहरण 2 और 3 दिखाएगी लेकिन पहले उदाहरण नहीं। फिर भी, यह इस बात पर निर्भर हो सकता है कि आप कई SalesID मानों की तलाश क्यों कर रहे हैं।

EDIT2:

निम्न क्वेरी नीचे एपीसी द्वारा पोस्ट किया गया और में है कि यह सभी पंक्तियों जिसमें एक SalesID एक बार से अधिक दिखाई दिया है पता चलता CTE की तुलना में मैं ऊपर उल्लेख बेहतर है। मैं यहां पूर्णता के लिए इसे शामिल कर रहा हूं। मैंने केवल SalesID मानों को एक साथ समूहीकृत रखने के लिए एक आदेश दिया है। ऑर्डर द्वारा उपरोक्त सीटीई में भी मदद मिल सकती है।

SELECT * 
FROM AXDelNotesNoTracking 
WHERE SalesID IN 
    ( SELECT SalesID 
      FROM AXDelNotesNoTracking 
      GROUP BY SalesID 
      HAVING COUNT(*) > 1 
    ) 
ORDER BY SalesID 
0

इस प्रयास करें:

select salesid,count (salesid) from AXDelNotesNoTracking group by salesid having count (salesid) >1 
+0

-1 यह है कि मूल प्रश्न पूछने के बाद, केवल एक से अधिक बार प्रदर्शित होने वाले रिकॉर्ड की पहचान करने के लिए हैविंग क्लॉज गुम है। –

+0

उन्होंने उल्लेख नहीं किया कि वह केवल 1 से अधिक रिकॉर्ड देखना चाहता है लेकिन उन्हें –

+1

जांचने के लिए सवाल कहता है: "मैं यह जांचना चाहता हूं कि किसी विशेष कॉलम में डेटा का एक टुकड़ा एक से अधिक बार प्रकट होता है"। हैविंग क्लॉज के बिना आप सभी मूल्य वापस ले लेंगे और यदि टेबल बड़ा है तो उन लोगों को ढूंढना मुश्किल होगा जो एक से अधिक बार दिखाई देते हैं। –

4

कैसे के बारे में:

select salesid from AXDelNotesNoTracking group by salesid having count(*) > 1; 
संबंधित मुद्दे