आपका अनुरोध बहुत आसान लगता है, लेकिन इसमें दो जटिलताएं हैं। पहला यह है कि एक पंक्ति दूसरे दो का सारांश है। यह क्वेरी में rollup
या grouping sets
का उपयोग करने का सुझाव देता है।
दूसरा आपके पास कोई डेटा होने पर मूल्य होने की आवश्यकता है। यह "ड्राइवर" सबक्वायरी के उपयोग का सुझाव देता है। इस तरह की एक सबक्वायरी मूल्यों को आवंटित करने से पहले आउटपुट में सभी पंक्तियों को परिभाषित करती है। आप left outer join
के साथ ड्राइवर तालिका का उपयोग करते हैं।
एक अस्थिर आवश्यकता केवल एक वर्ष का उल्लेख करने के लिए हो सकती है।
क्वेरी के लिए निम्नलिखित दृष्टिकोण वर्ष के लिए अंतिम रूप को एक साथ रखता है। फिर बाएं, सारांश में शामिल किसी भी अगर वहाँ से मूल्यों को खींच:
with year as (
select 2013 as Year
)
select driver.label, coalesce(s.value, 0) as Value, driver.Year
from ((select 'Male' as label, year from year
) union all
(select 'Female' as label, year from year
) union all
(select 'Total' as label, year from year
)
) driver left outer join
(select coalesce(Gender, 'Total') as Gender, year.year, count(*) as value
from Students cross join year
group by Gender with Rollup
) s
on driver.year = s.year;
मतलब यह है कि लिंग के रूप में "पुरुष" और "महिला" का प्रतिनिधित्व करती है और वहाँ एक स्तंभ डेटा में year
कहा जाता है (नमूना इनपुट के बिना यह है कि या टेबल स्वरूपों को कॉलम नामों और नमूना मानों पर अनुमान लगाना पड़ता है)।
स्रोत
2013-06-15 07:39:36
शायद तुम DDL और अपने वर्तमान प्रदान कर सकते हैं क्वेरी? – Nikola
छात्र तालिका (आईडी, नाम, लिंग, पंजीकृत वर्ष) – aby
आपके लिए चुनने के लिए कई अलग-अलग विकल्प :) क्या आप सिर्फ एसक्यूएल से प्यार नहीं करते हैं! – KyleK