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

स्तंभों की गतिशील संख्या में MySQL धुरी पंक्ति

दुर्भाग्य से MySQL में PIVOT नहीं है फ़ंक्शन जो मूल रूप से आप करने की कोशिश कर रहे हैं। तो आपको CASE . के साथ एक समग्र फ़ंक्शन का उपयोग करने की आवश्यकता होगी कथन:

select pt.partner_name,
  count(case when pd.product_name = 'Product A' THEN 1 END) ProductA,
  count(case when pd.product_name = 'Product B' THEN 1 END) ProductB,
  count(case when pd.product_name = 'Product C' THEN 1 END) ProductC,
  count(case when pd.product_name = 'Product D' THEN 1 END) ProductD,
  count(case when pd.product_name = 'Product E' THEN 1 END) ProductE
from partners pt
left join sales s
  on pt.part_id = s.partner_id
left join products pd
  on s.product_id = pd.prod_id
group by pt.partner_name

देखें एसक्यूएल डेमो

चूंकि आप उत्पादों को नहीं जानते हैं, इसलिए आप शायद इसे गतिशील रूप से करना चाहेंगे। यह तैयार बयानों का उपयोग करके किया जा सकता है।

डायनामिक पिवट टेबल (पंक्तियों को कॉलम में बदलें) के साथ आपका कोड इस तरह दिखेगा:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'count(case when Product_Name = ''',
      Product_Name,
      ''' then 1 end) AS ',
      replace(Product_Name, ' ', '')
    )
  ) INTO @sql
from products;

SET @sql = CONCAT('SELECT pt.partner_name, ', @sql, ' from partners pt
left join sales s
  on pt.part_id = s.partner_id
left join products pd
  on s.product_id = pd.prod_id
group by pt.partner_name');

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

देखें एसक्यूएल डेमो

संभवतः यह ध्यान देने योग्य है कि GROUP_CONCAT डिफ़ॉल्ट रूप से 1024 बाइट्स तक सीमित है। आप इसे अपनी प्रक्रिया की अवधि के लिए उच्चतर सेट करके इसके आसपास काम कर सकते हैं, अर्थात। SET @@group_concat_max_len = 32000;




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. लूपिंग के बिना PHP और MySQL के साथ स्कोर तालिका से किसी की 'रैंक' कैसे प्राप्त करें?

  2. एकाधिक स्तंभों के साथ एकल निश्चित तालिका बनाम लचीली सार सारणी

  3. MySQL पूर्णांक फ़ील्ड PHP में स्ट्रिंग के रूप में लौटाया जाता है

  4. MySQL कार्यक्षेत्र में एक आरेख से एक स्क्रिप्ट कैसे उत्पन्न करें

  5. SQL ALTER DATABASE Syntax - DBMS द्वारा सूचीबद्ध