2012-12-20 16 views
5

मेरे पास ऐसा कोई प्रश्न है जो शहर में प्रत्येक मामले के लिए पंक्तियों की संख्या देता है। अगर वहाँ कोई भी पंक्ति एक शहर से लौटेगिनती (*) का उपयोग कर शून्य प्रदर्शित करें यदि किसी विशेष मामले के लिए कोई परिणाम नहीं लौटाया गया

select 
    case edition_id 
     when 6 then 'DELHI' 
     when 50 then 'AHMEDABAD' 
     when 4 then 'HYDERABAD' 
     when 25 then 'KOLKATA' 
     when 51 then 'BANGALORE' 
     when 5 then 'MUMBAI' 
     when 24 then 'CHENNAI' 
    end as CITY, 
    count(*) as Total 
from #tmptab1 
group by edition_id 

drop table #tmptab1 

परिणाम बाहर आता है की तरह

CITY Total 
MUMBAI 1 
DELHI 28 
CHENNAI 1 
KOLKATA 35 
AHMEDABAD 3 

तो हो सकता है, कि शहर अंतिम परिणाम

मैं

के रूप में परिणाम चाहते में छोड़ दिया जाता है
CITY Total 
MUMBAI 1 
DELHI 28 
CHENNAI 1 
KOLKATA 35 
AHMEDABAD 3 
BANGALORE 0 -- if no result from bangalore display zero. 

यह कैसे करें?

मैं

case count(*)>0 then count(*) else 0 end as Total 

की कोशिश की लेकिन यह

उत्तर

5

काम नहीं करता मैं एक अस्थायी तालिका में शहरों सम्मिलित हैं, तो एक वाम समूहीकरण क्वेरी के साथ शामिल हों करते इस प्रकार है:

CREATE TABLE #cities (edition_id INT, city VARCHAR(16)) 
INSERT INTO #cities VALUES(6, 'DELHI') 
INSERT INTO #cities VALUES(50, 'AHMEDABAD') 
INSERT INTO #cities VALUES(4, 'HYDERABAD') 
INSERT INTO #cities VALUES(25, 'KOLKATA') 
INSERT INTO #cities VALUES(51, 'BANGALORE') 
INSERT INTO #cities VALUES(5, 'MUMBAI') 
INSERT INTO #cities VALUES(24, 'CHENNAI') 

select 
    c.city 'City', 
    ISNULL(t.Total, 0) 'Total' 
from 
    #cities c 
    LEFT JOIN (
     SELECT 
      edition_id, count(*) as Total 
     #tmptab1 
     GROUP BY edition_id 
    ) AS t 
    ON c.edition_id = t.edition_id 

drop table #tmptab1 
drop table #cities 

बीटीडब्ल्यू, यह सामान्य तालिका के रूप में #cities होने का अर्थ होगा ताकि आपको प्रत्येक बार क्वेरी चलाने के लिए इसे बनाने की आवश्यकता न हो।

+2

शहरों एक सामान्य तालिका बनाने के बारे में सहमत हैं। इसका मतलब यह भी है कि जब आप भविष्य में एक नया शहर जोड़ना चाहते हैं तो आपको अपना कोड बदलने की जरूरत नहीं है - बस – Greg

+1

तालिका में नया रिकॉर्ड जोड़ें, यह वर्णन नहीं कर सकता कि मैं कितना आभारी हूं ... बहुत मास्टर विकर –

2

समस्या यह है कि आप edition_id द्वारा समूहित कर रहे हैं। यदि आपके परिणाम में कोई संस्करण_आईडी नहीं है तो यह इसकी गणना नहीं कर सकता है।

क्या आप के बजाय कर सकते हैं उनके संस्करण आईडी के साथ सभी शहरों बाहर का चयन है, मायने रखता है करने के लिए इसे में शामिल होने के लिए छोड़ दिया और फिर एक isnull कार्य करें:

WITH CITIES AS 
(
     SELECT 6 AS edition_id, 'DELHI' As CityName 
     UNION 
     SELECT 50, 'AHMEDABAD' 
     UNION 
     .... 
) 
SELECT c.cityname, isnull(counts.total,0) as total 
FROM CITIES 
LEFT JOIN (SELECT edition_id, count(*) as Total #tmptab1 group by edition_id) counts ON counts.edition_id = CITIES.edition_id