2012-01-30 21 views
8

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

क्या ऐसा करने का कोई तरीका है जिससे आप इस तरह कुछ खत्म कर लेंगे?

Product | Times sold 
Milk | 5 
Bread | 18 
Cheese | 0 

... और इसी तरह।

+2

आप कोई आदेश के साथ उत्पादों वापस लौटे, तो परिवर्तन नहीं करना चाहते, तो अपने 'वाम JOIN' एक' अंदरूनी शामिल हों होने के लिए इसके बजाए –

+2

एक 'बाएं जॉइन' सही काम है, विशेष रूप से यदि आपके उदाहरण में आप "पनीर" सूचीबद्ध करना चाहते हैं, तो उसे शून्य बार – Lamak

+0

बेचा गया है यदि आप ऐसी पंक्तियां नहीं चाहते हैं जिनके पास कोई ऑर्डर नहीं है, तो आपका उदाहरण क्यों है आउटपुट शो "पनीर | 0"? – ean5533

उत्तर

22

तुम सिर्फ करते हैं एक COUNT(*), तो आप उत्पादों 1 के रूप में कोई आदेश नहीं है कि ... बजाय, COUNT(o.OrderID) है, जो केवल रिकॉर्ड कि एक गैर-शून्य OrderID की गणना होती है गिनती कर रहे हैं।

SELECT p.Product, COUNT(o.OrderID) 
FROM 
    Products p LEFT JOIN 
    Orders o ON o.ProductID = p.ProductID 
GROUP BY p.Product 
+0

के बीच अंतर क्या है, मुझे लगता है कि ओप वर्तमान में – Lamak

+1

कर रहा है मेरा अनुमान है कि वह 'बाएं शामिल' कर रहा है, ताकि यह 'उत्पादों' को दिखा सके। जिनके पास 'ऑर्डर' नहीं है, लेकिन वह 'गिनती (*)' कर रहा है, इसलिए यह उन्हें 0. –

+0

आह के बजाय 1 की गिनती के साथ दिखाता है! मैं क्वेरी पर खुद को अंधेरा देख रहा था, मुझे नहीं पता कि मैं COUNT (productID) –

0

कुछ

Select Products.ProductName, Count(Orders.OrderID) 
From Orders Inner join on Products Where Orders.ProductID = Products.ProductID 
Group By Products.ProductName 
0

@Michael तरह सही है।

आप एक गिनती के साथ एक आदेश तालिका है, तो यह इस प्रकार दिखाई देगा:

SELECT p.Product, SUM(ISNULL(o.ItemCount,0)) as [Count] 
FROM 
    Products p LEFT JOIN 
    Orders o ON o.ProductID = p.ProductID 
GROUP BY p.Product 
संबंधित मुद्दे