यह मूल रूप से एक PIVOT
है लेकिन MySQL में PIVOT फ़ंक्शन नहीं है। तो आप एक समग्र फ़ंक्शन और CASE
. का उपयोग करके इसे दोहराना चाहेंगे बयान। अगर आपको Grant
की संख्या पता है आपके पास जो मान हैं, आप इस तरह की क्वेरी को हार्ड-कोड कर सकते हैं:
select
Month,
sum(case when `grant`='DOE' then subtotal else 0 end) DOE,
sum(case when `grant`='Hatch' then subtotal else 0 end) Hatch,
sum(case when `grant`='NIH' then subtotal else 0 end) NIH,
sum(case when `grant`='NSF' then subtotal else 0 end) NSF,
sum(case when `grant`='Other' then subtotal else 0 end) Other,
sum(case when `grant`='State' then subtotal else 0 end) State
from yourtable
group by month
देखें SQL Fiddle with Demo
अब, यदि आपके पास Grant
. के लिए अज्ञात संख्या में मान हैं , तो आप इस क्वेरी का एक गतिशील संस्करण उत्पन्न करने के लिए तैयार कथन का उपयोग कर सकते हैं:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'sum(case when `Grant` = ''',
`Grant`,
''' then Subtotal else 0 end) AS `',
`Grant`, '`'
)
) INTO @sql
FROM yourtable;
SET @sql = CONCAT('SELECT month, ', @sql, '
FROM yourtable
group by month');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
देखें SQL Fiddle with Demo
दोनों एक ही परिणाम देते हैं:
| MONTH | HATCH | NIH | NSF | OTHER | DOE | STATE |
-----------------------------------------------------------------
| Nov-2012 | 144.56 | 240.9 | 100.7 | 276.67 | 0 | 0 |
| Oct-2012 | 321.54 | 0 | 234.53 | 312.35 | 214.35 | 0 |
| Sep-2012 | 147.99 | 0 | 156.89 | 245.67 | 0 | 148.66 |