Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

स्तंभ नामों के लिए गतिशील पंक्ति डेटा का उपयोग करके तालिका के पुनर्निर्माण के लिए SQL क्वेरी

यह मूल रूप से एक 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 |



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. तालिका अपडेट करें और फिर MySQL में अपडेट की गई पंक्तियां लौटाएं

  2. JDBC टाइमस्टैम्प को NULL में परिवर्तित कर रहा है (zeroDateTimeBehavior समस्या)

  3. पीएचपी पीडीओ MySQL क्वेरी पसंद -> एकाधिक कीवर्ड

  4. स्प्रिंग जेपीए application.properties useSSL

  5. SET @rownum =0 का उपयोग करने का प्रयास करने में त्रुटि; पीएचपी में