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

mysql कॉलम नाम के रूप में गतिशील पंक्ति मानों का चयन करें, मान के रूप में एक और कॉलम

कुछ अन्य RDBMS के विपरीत MySQL के पास डिज़ाइन द्वारा इस प्रकार के पिवट संचालन के लिए मूल समर्थन नहीं है (डेवलपर्स को लगता है कि यह डेटाबेस, आपके एप्लिकेशन की परत के बजाय प्रस्तुति के लिए अधिक उपयुक्त है)।

यदि आपको MySQL के भीतर इस तरह के जोड़तोड़ को पूरी तरह से करना है, तो एक तैयार स्टेटमेंट बनाना एक रास्ता है-हालाँकि CASE के साथ खिलवाड़ करने के बजाय , मैं शायद केवल MySQL के GROUP_CONCAT() समारोह:

SELECT CONCAT(
  'SELECT `table`.id', GROUP_CONCAT('
     ,    `t_', REPLACE(name, '`', '``'), '`.value
         AS `', REPLACE(name, '`', '``'), '`'
     SEPARATOR ''),
 ' FROM `table` ', GROUP_CONCAT('
     LEFT JOIN `table`   AS `t_', REPLACE(name, '`', '``'), '`
            ON `table`.id = `t_', REPLACE(name, '`', '``'), '`.id
           AND `t_', REPLACE(name, '`', '``'), '`.name = ', QUOTE(name)
     SEPARATOR ''),
 ' GROUP BY `table`.id'
) INTO @qry FROM (SELECT DISTINCT name FROM `table`) t;

PREPARE stmt FROM @qry;
EXECUTE stmt;

इसे sqlfiddle पर देखें ।

ध्यान दें कि GROUP_CONCAT() group_concat_max_len द्वारा सीमित है चर (1024 बाइट्स का डिफ़ॉल्ट:यहां प्रासंगिक होने की संभावना नहीं है जब तक कि आपके पास कुछ बहुत लंबा name . न हो मान)।




  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 क्वेरी परिणाम को एक .CSV फ़ाइल में कैसे सहेजें

  3. मैं MySQL तालिकाओं में अनुक्रमणिका कैसे जोड़ूँ?

  4. एक MySQL डेटाबेस में मुद्रा मूल्यों को संग्रहीत करने के लिए सर्वश्रेष्ठ डेटा प्रकार

  5. MySQL 8.0 में क्या मॉनिटर करें?