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

mysql डेटा के क्षैतिज लेआउट के लिए क्वेरी

आपको जो चाहिए वह एक पिवट क्वेरी है। चूंकि MySQL के पास इसके लिए कोई कथन नहीं है, इसलिए आपको इसे "हाथ से" लिखना होगा (अधिक सटीक रूप से, एक गतिशील SQL अभिव्यक्ति बनाएं):

तो, यह कुछ इस तरह हो सकता है:

-- First you need to build the column list.
-- The "CASE ... END" expression will filter the data for each column
-- I use "max()" as an example; use whatever aggregate function you need.
select
  group_concat(distinct
    concat(
      'max(case when del_ProductID = ', del_productID, ' then del_id end) ',
      'as `del_productID-', del_productID, '` '
    )
  )
into @sql
from example;

-- Now build the full SELECT statement
set @sql = concat('SELECT del_date, ', @sql, ' from example group by del_date');


-- OPTIONAL: Check the SELECT statement you've just built
select @sql;

-- Prepare a statement using the SELECT statement built above
prepare stmt from @sql;
execute stmt;

-- When you are done, be sure to dealocate the prepared statement
deallocate prepare stmt;

कृपया इस उदाहरण को SQL fiddle में देखें

स्पष्टीकरण

आप कह सकते हैं "यार, यह काफी जटिल लग रहा है!"... लेकिन यह बिल्कुल भी जटिल नहीं है (यह सिर्फ श्रमसाध्य है)। तो, उपरोक्त समाधान कैसे काम करता है?

पहला कदम कॉलम सूची और उसे भरने के लिए एक एक्सप्रेशन बनाना है। group_concat() फ़ंक्शन पंक्ति मान (या भाव) लेगा और उन्हें अल्पविराम से अलग करते हुए संयोजित करेगा। पिवट तालिका के परिणाम में मान दिखाने के लिए आपको एक समग्र कार्य की आवश्यकता है। मैंने max() चुना है एक उदाहरण के रूप में, लेकिन आप sum() . का उपयोग कर सकते हैं , average() या कोई अन्य समग्र कार्य।

जहां तक ​​case ... end कुल फ़ंक्शन के अंदर, आपको चाहिए कि पिवट तालिका का प्रत्येक कॉलम del_productID के मान से मेल खाता हो , इसलिए, उदाहरण के लिए, case when del_ProductID = 1 then del_id end del_id . का मान लौटाएगा केवल अगर del_ProductID 1 है (null लौटाएगा किसी भी अन्य मामले में, आप else 0 . जोड़ सकते हैं उदाहरण के लिए, यदि आप शून्य वापस करना चाहते हैं)।

select ... into अभिव्यक्ति के परिणाम को @sql . नामक एक चर में संग्रहीत करेगा ।

कॉलम सूची बनाने के बाद, आपको शेष select write लिखना होगा कथन... जो concat() . के साथ किया जाता है समारोह।

बाकी के लिए, यह बहुत सीधा है:@sql एक स्ट्रिंग है, इसलिए यदि आप इसे निष्पादित करना चाहते हैं, तो आपको इसके मूल्य का उपयोग करके एक तैयार कथन बनाना होगा (जो कि select है) स्टेटमेंट), और इसे निष्पादित करें।




  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. चेतावनी:mysqli_connect ():(HY000/2002):ऐसी कोई फ़ाइल या निर्देशिका नहीं

  3. mysql डेटा के साथ उच्च-निम्न कीमत के आधार पर छँटाई

  4. क्या ये दो कार्य स्वच्छता के लिए अधिक हैं?

  5. tomcat7:JDBC ड्राइवर वर्ग को लोड नहीं कर सका [com.mysql.jdbc.Driver]