Ich habe Probleme, meinen Kopf um diese Pivot-Tabelle in MySQL zu bekommen.Wie kann ich eine dynamische MySQL-Pivot-Tabelle schreiben?
Mit einem SQL-Aufruf, der wie folgt aussieht:
SELECT DISTINCT year, type1, type2, type3, type4 FROM Table_08 WHERE iso2ltr = 'CO' AND city = 'Boulder' ORDER BY year DESC LIMIT 7
der Tisch etwas wie folgt aussieht:
year | type1 | type2 | type3 | type4
-----------------------------------------------------------------------
2014 | 242 | 1 | 41 | NULL
2013 | 218 | 0 | 38 | NULL
2012 | 249 | 0 | NULL | 32
2011 | 275 | 2 | NULL | 35
2010 | 210 | 4 | NULL | 33
2009 | 245 | 5 | NULL | 32
2008 | 201 | 0 | NULL | 40
Bitte beachten, dass ich brauche BY Jahr DESC LIMIT 7. Die neuesten Daten, die ich zu haben, um wird für 2014
Dies ist, was ich suche:
type | 2014 | 2013 | 2012 | 2011 | 2010 | 2009 | 2008
---------------------------------------------------------------------------------------------------------------
type1 | 242 | 218 | 249 | 275 | 210 | 245 | 201
type2 | 1 | 0 | 0 | 2 | 4 | 5 | 0
type3 | 41 | 38 | NULL | NULL | NULL | NULL | NULL
type4 | NULL | NULL | 32 | 35 | 33 | 32 | 40
Diese SQL gibt mir nur eine Art, und es ist nicht dynamisch:
SELECT city,
MAX(CASE WHEN YEAR =2014 THEN type1 END) AS '2014',
MAX(CASE WHEN YEAR =2013 THEN type1 END) AS '2013',
MAX(CASE WHEN YEAR =2012 THEN type1 END) AS '2012',
MAX(CASE WHEN YEAR =2011 THEN type1 END) AS '2011',
MAX(CASE WHEN YEAR =2010 THEN type1 END) AS '2010',
MAX(CASE WHEN YEAR =2009 THEN type1 END) AS '2009',
MAX(CASE WHEN YEAR =2008 THEN type1 END) AS '2008'
FROM Table_08
WHERE iso2ltr = 'CO' AND city = 'Boulder'
GROUP BY city
Wie kann ich alle Arten aufgeführt werden, und dynamisch sein?
Jede Hilfe willkommen
betrachten mit GROUP_CONCAT, es ist dynamisch und gibt eine durch Komma getrennte Liste zurück. –