2013-02-06 10 views
11

मैं बस सोच रहा था कि एक प्रश्न का उपयोग कर तालिका से दो अलग "गिनती" योग प्राप्त करने का कोई तरीका है या नहीं? यही है, निम्न के जैसा तालिका का उपयोग करके मैं प्रत्येक कोड (विशिष्ट) को पुनर्प्राप्त करना चाहता हूं और 'एक्स या डी के बराबर नहीं' स्थिति की कुल संख्या दिखा सकता हूं, और उसके बाद एक अतिरिक्त कॉलम होता है जो स्थिति की कुल संख्या को बराबर दिखाता है एक्स या डी तक और रद्द की तारीख किसी दिए गए दिनांक से अधिक है (कहें, अंतिम 14 दिन)।एसक्यूएल: विभिन्न मानदंडों के साथ एकाधिक गिनती बयान

तालिका:

Code: Status Cancel_Date 
----------------------------------- 
AAA X  2012-02-01 
AAA 
BBB X  2012-02-01 
AAA D  2012-01-01 
AAA 
BBB  
BBB D  2012-02-01 
BBB X  2012-01-01 

उदाहरण परिणाम (ऊपर डेटा के आधार पर):

Code: TotalNotXorD  TotalXorD 
------------------------------------ 
AAA 2    1 
BBB 1    2 

TotalNotXorD: उदा

select code, count(*) 
from table 
where status not in('X','D') 
group by code 

कुल मिलाकर: उदा।

select code, count(*) 
from table 
where status in('X','D') 
    and cancel_date >= '2012-02-01' 
group by code 

मैंने सबक्वायरी आदि करने पर ध्यान दिया है लेकिन मुझे लगता है कि मुझे आवश्यक परिणाम नहीं मिल रहे हैं।

कोई विचार?

धन्यवाद।

+0

कर? – Michas

उत्तर

37

SELECT a.code, 
     COALESCE(b.totalNotXorD, 0) totalNotXorD, 
     COALESCE(c.totalXorD, 0) totalXorD, 
FROM (SELECT DISTINCT Code FROM tableName) a 
     LEFT JOIN 
     (
      select code, count(*) totalNotXorD 
      from table 
      where status not in('X','D') 
      group by code 
     ) b ON a.code = b.code 
     LEFT JOIN 
     (
      select code, count(*) totalXorD 
      from table 
      where status in('X','D') 
       and cancel_date >= '2012-02-01' 
      group by code 
     ) c ON a.code = c.code 

या बस क्या डेटाबेस आप उपयोग कर रहे हैं CASE

SELECT Code, 
     SUM(CASE WHEN status NOT IN ('X','D') OR status IS NULL THEN 1 ELSE 0 END) TotalNotXorD, 
     SUM(CASE WHEN status IN ('X','D') AND cancel_date >= '2012-02-01' THEN 1 ELSE 0 END) TotalXorD 
FROM tableName 
GROUP BY Code 
+0

आपके उत्तर जेडब्ल्यू के लिए धन्यवाद। मैंने इसे आज़माया है लेकिन मुझे निम्न त्रुटि मिल रही है, जो कि मेरे पास होने वाले मुद्दों के समान है: त्रुटि: कॉलम 'स्थिति' चुनिंदा सूची में अमान्य है क्योंकि यह या तो कुल कार्य या ग्रुप BY में निहित नहीं है खंड। (राज्य: 37000, मूल कोड: 1 एफबी 8) त्रुटि: चयन सूची में कॉलम 'स्थिति' अमान्य है क्योंकि यह या तो कुल कार्य या ग्रुप बाय क्लॉज में निहित नहीं है। (राज्य: 37000, मूल कोड: 1 एफबी 8) – jj2

+0

मेरा अद्यतन उत्तर देखें। वैसे, आप किस rdbms का उपयोग कर रहे हैं? –

+0

डेमो के लिए यहां देखें http://www.sqlfiddle.com/#!2/aba2a/2 –

संबंधित मुद्दे