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

MySQL या PHP पंक्तियों को कॉलम में बदलें

यदि आप अपने वर्षों के लिए भी अलग कॉलम रखना चाहते हैं, तो आपको वर्ष जोड़ना होगा (आपके कॉलम date से परिकलित) ) आपके डायनेमिक sql कोड में:

CREATE DEFINER=`root`@`localhost` PROCEDURE `test`()
BEGIN
  SET group_concat_max_len=2048;
  SET @sql = NULL;

  SELECT GROUP_CONCAT(DISTINCT CONCAT(
      'MAX(IF(month = ''',
      month,
      ''' and year(date) = ',
      year(date),
      ', amount, NULL)) AS `',
      month,
      '_',
      year(date),
      '`'
    )
    order by date
  ) INTO @sql
  FROM tmp_results;

  if coalesce(@sql,'') != '' then
    set @sql = concat(', ', @sql);
  end if; 

  SET @sql = CONCAT(
    'SELECT r.account, 
     r.region ',  
     coalesce(@sql,''),
    ' FROM tmp_results r
     LEFT JOIN accounts AS a
     on r.account_id = a.id
     GROUP BY r.account, r.region');

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

कॉलम का नाम January_2017 . होगा , और मैंने एक order by date जोड़ा है , अन्यथा वे आमतौर पर अनियंत्रित हो जाते।

मैंने एक group by r.region , अन्यथा यह काम नहीं करेगा यदि only_full_group_by आपके सर्वर पर सक्षम है (जो कि MySQL 5.7 से शुरू होने वाला डिफ़ॉल्ट मान है)।

और मैंने खाली तालिकाओं के लिए एक परीक्षण जोड़ा (जिसके परिणामस्वरूप अन्यथा कोई त्रुटि होगी)। यदि आपको इसकी आवश्यकता नहीं है और मेरे कोड के केवल कुछ हिस्सों को अपने में कॉपी करें, तो r.region के बाद लापता अल्पविराम से अवगत रहें में SET @sql = CONCAT('SELECT r.account, r.region ' आपके कोड की तुलना में, आपको इसे फिर से जोड़ना पड़ सकता है।

चूंकि प्रत्येक माह के कोड की लंबाई लगभग 80 है, इसलिए आपको group_concat_max_len बढ़ाना पड़ सकता है आपकी सबसे बड़ी संभावित क्वेरी फिट करने के लिए।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्या टेबल फ़ील्ड में हाइफ़न हो सकता है?

  2. mysql में अगली ऑटो-इन्क्रीमेंट आईडी कैसे प्राप्त करें?

  3. एक अलग तालिका बनाएं बिना एक चयन कथन में एक अस्थायी तालिका बनाएं

  4. mysql n अंतिम पंक्तियों में से चुनें

  5. समग्र प्राथमिक कुंजी कैसे ठीक से बनाएं - MYSQL