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

मैट्रिक्स तालिका बनाने के लिए SQL

इसके लिए आपको कंडीशनल समन और डायनेमिक SQL का इस्तेमाल करना होगा

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'SUM(CASE WHEN l.Item = ',
      id,
      ' THEN l.qty END) `',
      name, '`'
    )
  ) INTO @sql
FROM ItemLIst;

SET @sql = CONCAT('SELECT u.name, ', @sql, ' 
                     FROM OrderList l JOIN UserList u
                       ON l.User = u.id
                    GROUP BY u.name');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

आउटपुट:

|  NAME |  APPLE | ORANGE | BANANA |   KIWI |  MANGO |
------------------------------------------------------
| James | (null) | (null) | (null) | (null) |      1 |
|  John | (null) |      2 |      3 |      1 | (null) |
|  Mary |      4 |      2 | (null) | (null) | (null) |

यह रहा SQLFiddle डेमो

अब आप इसे एक दृश्य में लपेटने में सक्षम नहीं होंगे, लेकिन आप इसे एक संग्रहित प्रक्रिया बना सकते हैं।

DELIMITER $$
CREATE PROCEDURE sp_order_report()
BEGIN
  SET @sql = NULL;
  SELECT
    GROUP_CONCAT(DISTINCT
      CONCAT(
        'SUM(CASE WHEN l.Item = ',
        id,
        ' THEN l.qty END) `',
        name, '`'
      )
    ) INTO @sql
  FROM
    ItemLIst;
  SET @sql = CONCAT('SELECT u.name, ', @sql, ' 
                       FROM OrderList l JOIN UserList u
                         ON l.User = u.id
                      GROUP BY u.name');

  PREPARE stmt FROM @sql;
  EXECUTE stmt;
  DEALLOCATE PREPARE stmt;
END$$
DELIMITER ;

और इसे इस तरह इस्तेमाल करें:

CALL sp_order_report();

यह रहा SQLFiddle डेमो




  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. क्या पीडीओ के साथ एक MySQL तैयार कथन को बंद करने के लिए कोई कार्य है?

  3. PHP और MySQL का उपयोग करके जापानी वर्ण प्रदर्शित करने में समस्या

  4. किसी अन्य तालिका में पंक्ति अद्यतन करने के लिए ट्रिगर

  5. GitLab CI पर परीक्षण स्क्रिप्ट से पहले mysql कमांड निष्पादित करें