केस स्टेटमेंट मेरा सबसे अच्छा एसक्यूएल मित्र है। दोनों महीनों में अपना 0 रेव जनरेट करने के लिए आपको समय के लिए एक टेबल भी चाहिए।
अनुमान निम्नलिखित तालिकाओं की उपलब्धता पर आधारित हैं:
और
उदाहरण 1 बिना खाली पंक्तियों के:
select
Category
,month
,SUM(CASE WHEN YEAR = 2008 THEN Revenue ELSE 0 END) this_year
,SUM(CASE WHEN YEAR = 2007 THEN Revenue ELSE 0 END) last_year
from
sales
where
year in (2008,2007)
group by
Category
,month
रिटर्न:
Category | Month | Rev. This Year | Rev. Last Year
Bikes 1 10 000 0
Bikes 2 12 000 11 000
Bikes 3 12 000 11 500
Bikes 4 0 15 400
उदाहरण 2 खाली पंक्तियों के साथ:मैं एक उप क्वेरी का उपयोग करने जा रहा हूं (लेकिन अन्य नहीं कर सकते हैं) और प्रत्येक उत्पाद और वर्ष महीने के कॉम्बो के लिए एक खाली पंक्ति वापस कर देंगे।
select
fill.Category
,fill.month
,SUM(CASE WHEN YEAR = 2008 THEN Revenue ELSE 0 END) this_year
,SUM(CASE WHEN YEAR = 2007 THEN Revenue ELSE 0 END) last_year
from
sales
Right join (select distinct --try out left, right and cross joins to test results.
product
,year
,month
from
sales --this ideally would be from a products table
cross join tm
where
year in (2008,2007)) fill
where
fill.year in (2008,2007)
group by
fill.Category
,fill.month
रिटर्न:
Category | Month | Rev. This Year | Rev. Last Year
Bikes 1 10 000 0
Bikes 2 12 000 11 000
Bikes 3 12 000 11 500
Bikes 4 0 15 400
Bikes 5 0 0
Bikes 6 0 0
Bikes 7 0 0
Bikes 8 0 0
ध्यान दें कि अधिकांश रिपोर्टिंग टूल इस क्रॉसस्टैब या मैट्रिक्स कार्यक्षमता को करेंगे, और अब जब मुझे लगता है कि SQL सर्वर 2005 में पिवट सिंटैक्स है जो इसे भी करेगा।
यहां कुछ अतिरिक्त संसाधन दिए गए हैं। CASEhttp://www.4guysfromrolla.com/webtech/ 102704-1.shtml SQL सर्वर 2005 PIVOThttp://msdn.microsoft.com/en-us /लाइब्रेरी/ms177410.aspx