mysql

2012-04-06 14 views
9

में पिवट तालिका मुझे पता है कि mysql में एक पिवट तालिका कैसे बनाएं (नीचे कोड उदाहरण देखें), लेकिन अगर पिवट तालिका में कॉलम की संख्या बहुत बड़ी है और मैं 2000 या तो टैगनाम टाइप नहीं करना चाहता ? - क्या उस सूची को उत्पन्न करने का कोई तरीका है? अग्रिम में बहुत धन्यवाद।mysql

drop table pivot; 
create table pivot SELECT time, 
     max(if(tagname = 'a', value, null)) AS 'a', 
     max(if(tagname = 'b', value, null)) AS 'b', 
     max(if(tagname = 'c', value, null)) AS 'c' 
    FROM test where tagname in ('a','b','c') 
GROUP BY time; 
select * from pivot; 
+3

नज़र पर यह लेख। http://buysql.com/mysql/14-how-to-automate-pivot-tables.html – GeoGo

उत्तर

1

तुम हमेशा कि वास्तव में :-)

#!/bin/sh 

mysql -BN test > /tmp/$$_tagnames.tmp <<SQL 
select distinct tagname from test; 
SQL 

cat > /tmp/$$_create_table.sql <<EOF 
drop table if exists pivot; 
create table pivot select 
EOF 

while read tag; do 
    echo "max(if(tagname = '$tag', value, null)) AS '$tag'," >> /tmp/$$_create_table.sql 
done < /tmp/$$_tagnames.tmp 

cat >> /tmp/$$_create_table.sql <<EOF 
time 
FROM test 
GROUP BY time; 
select * from pivot; 
EOF 

mysql -Bt test < /tmp/$$_create_table.sql 

rm /tmp/$$_create_table.sql 
rm /tmp/$$_tagnames.tmp 

डाटा करता है एक खोल स्क्रिप्ट बना सकते हैं:

mysql> select * from test; 
+---------+-------+---------------------+ 
| tagname | value | time    | 
+---------+-------+---------------------+ 
| a  | foo | 2012-12-21 00:00:01 | 
| b  | foo | 2012-04-27 00:00:01 | 
| c  | bar | 2012-03-27 00:00:01 | 
| d  | bar | 2012-12-21 00:00:01 | 
+---------+-------+---------------------+ 
4 rows in set (0.00 sec) 

स्क्रिप्ट उत्पादन:

$ ./pivot.sh 
+------+------+------+------+---------------------+ 
| a | b | c | d | time    | 
+------+------+------+------+---------------------+ 
| NULL | NULL | bar | NULL | 2012-03-27 00:00:01 | 
| NULL | foo | NULL | NULL | 2012-04-27 00:00:01 | 
| foo | NULL | NULL | bar | 2012-12-21 00:00:01 | 
+------+------+------+------+---------------------+ 
+0

यह शैल स्क्रिप्टिंग का एक चालाक उपयोग है और यह पैटर्न अन्य भाषाओं के लिए भी उपयोग किया जा सकता है। –