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

क्या केस का उपयोग किए बिना MySQL में कॉलम में पंक्तियों को पिवट करने का कोई तरीका है?

कंगना ने जो लिंक प्रदान किया है, वह आपको दिखाएगा कि यदि आप कॉलम के नामों को पहले से जानते थे तो इसे कैसे दूर किया जाए। स्टेटमेंट बनाने के लिए डायनेमिक SQL का उपयोग करने के अलावा, हम उसी लॉजिक के लिए जा रहे हैं। प्रत्येक फ़ील्ड में 2 भाग होते हैं जिन्हें आपको शामिल करने की आवश्यकता होती है, चयन कथन में फ़ील्ड और मान प्राप्त करने के लिए एक उपयुक्त जुड़ाव ... इसलिए हमें दो भागों में कथन बनाने की आवश्यकता होगी

इसे बनाने के लिए पहले 3 चर घोषित करें ... मैं इस उदाहरण के लिए @select, @join, और @sql के साथ जाऊंगा। चरों को प्रारंभिक मान दें

 set @select = 'select user_id,'
 set @join = 'from table t'

अब टेबल.की फ़ील्ड में अलग-अलग मानों के साथ एक कर्सर घोषित करें और लोड करें। मैं @field का उपयोग करने जा रहा हूं क्योंकि चर अलग-अलग table.key फ़ील्ड के साथ पॉप्युलेट हो जाता है। फिर इसके माध्यम से दो चरों का निर्माण करते हुए लूप करें:

 set @select = @select + ', ' + @field + '.value as '[email protected]+'
 set @join = @join + ' left join table ' + @field + 'on '[email protected]+'.key = t.key and and '[email protected]+'.user_id = t.user_id

(जॉइन को टेबल के उपनाम के रूप में @field में मान का उपयोग करने के लिए डिज़ाइन किया गया है)

अपने कर्सर के माध्यम से लूप @select और @join का निर्माण करें। लूप के अंत में:

set @sql = @select + @join + 'where clause if you want'
exec @sql

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




  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 password_verify () हैश और पास मेल नहीं खाएगा

  2. डैश के साथ MySQL स्कीमा नाम मुझे कमांड लाइन क्वेरी निष्पादित करने की अनुमति नहीं देता है

  3. MySQL में समूहीकृत रैंकिंग कैसे करें

  4. #1055 - चयन सूची की अभिव्यक्ति ग्रुप बाय क्लॉज में नहीं है और इसमें गैर-समेकित कॉलम है यह sql_mode=only_full_group_by के साथ असंगत है

  5. सीएसवी बनाम MySQL प्रदर्शन