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

एसक्यूएल स्टेटमेंट - एसक्यूएल मैट्रिक्स

ऐसे दो तरीके हैं जिनसे आप पिवट कर सकते हैं MySQL में डेटा। यदि आप समय से पहले के मूल्यों (टीमों) को जानते हैं तो आप मूल्यों को हार्ड-कोड करेंगे या आप गतिशील एसक्यूएल उत्पन्न करने के लिए तैयार कथन का उपयोग कर सकते हैं।

एक स्थिर संस्करण होगा:

select TeamA,
  max(case when TeamB = 'A' then won - lost else 0 end) as A,
  max(case when TeamB = 'B' then won - lost else 0 end) as B,
  max(case when TeamB = 'C' then won - lost else 0 end) as C,
  max(case when TeamB = 'D' then won - lost else 0 end) as D,
  max(case when TeamB = 'E' then won - lost else 0 end) as E
from yourtable
group by TeamA;

देखें SQL Fiddle with Demo

यदि आप तैयार कथन के साथ एक गतिशील संस्करण का उपयोग करना चाहते हैं, तो कोड होगा:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(CASE WHEN TeamB = ''',
      TeamB,
      ''' THEN won - lost else 0 END) AS `',
      TeamB, '`'
    )
  ) INTO @sql
from
(
  select *
  from yourtable
  order by teamb
) x;

SET @sql 
  = CONCAT('SELECT TeamA, ', @sql, ' 
           from yourtable
           group by TeamA');

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

देखें SQL Fiddle with Demo

# 1 संपादित करें, इस बारे में सोचने के बाद मैं वास्तव में इसे थोड़ा अलग करूंगा। मैं एक वास्तविक मैट्रिक्स ओएस डेटा उत्पन्न करता हूं जहां टीम पंक्ति और कॉलम दोनों में दिखाई देती है। ऐसा करने के लिए आप सबसे पहले एक UNION ALL . का उपयोग करेंगे सभी टीमों को दो कॉलम में लाने के लिए क्वेरी:

select teama Team1, teamb Team2,
  won-lost Total
from yourtable
union all
select teamb, teama,
  won-lost
from yourtable

देखें SQL Fiddle with Demo . एक बार यह हो जाने के बाद, आप पिवट . करेंगे डेटा:

select Team1,
  coalesce(max(case when Team2 = 'A' then Total end), 0) as A,
  coalesce(max(case when Team2 = 'B' then Total end), 0) as B,
  coalesce(max(case when Team2 = 'C' then Total end), 0) as C,
  coalesce(max(case when Team2 = 'D' then Total end), 0) as D,
  coalesce(max(case when Team2 = 'E' then Total end), 0) as E
from
(
  select teama Team1, teamb Team2,
    won-lost Total
  from yourtable
  union all
  select teamb, teama,
    won-lost
  from yourtable
) src
group by Team1;

देखें SQL Fiddle with Demo . जो इसका अधिक विस्तृत परिणाम देता है:

| TEAM1 |  A | B |  C | D | E |
-------------------------------
|     A |  0 | 2 | -2 | 8 | 0 |
|     B |  2 | 0 |  0 | 0 | 0 |
|     C | -2 | 0 |  0 | 0 | 0 |
|     D |  8 | 0 |  0 | 0 | 0 |
|     E |  0 | 0 |  0 | 0 | 0 |


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mongoDB बनाम mySQL - कुछ पहलुओं में एक दूसरे से बेहतर क्यों है?

  2. आप PHP में उपयोगकर्ता को अद्वितीय उपयोगकर्ता नाम कैसे सुझाते हैं?

  3. mysql.connector.errors.ProgrammingError:विफल प्रसंस्करण प्रारूप-पैरामीटर; पायथन 'सूची' को MySQL प्रकार में परिवर्तित नहीं किया जा सकता है

  4. होटल आरक्षण प्रणाली SQL:दिनांक सीमा में उपलब्ध किसी भी कमरे की पहचान करें

  5. डायनेमिक कॉलम के साथ MySQL पिवट टेबल क्वेरी