2012-04-03 8 views
2

ich eine MySQL-Datenbank, die wie folgt aussieht:mysql Zellenwerte mit Daten als neue Spalten mit Jahren

|id | city | created | 
|1 | city1 |2011-12-10 | 
|2 | city2 |2010-02-01 | 
|3 | city3 |2009-12-03 | 
|4 | city1 |2012-11-16 | 
|5 | city2 |2012-08-03 | 
|6 | city3 |2011-10-01 | 
|7 | city1 |2009-10-02 | 
|8 | city2 |2011-12-01 | 
|9 | city3 |2012-06-30 | 

Aber ich möchte eine alternative Tabelle oder Sicht haben, die

|city | 2009 | 2010 | 2011 | 2012 | 
|city1 | 1 | 0 | 1 | 1 | 
|city2 | 0 | 1 | 1 | 1 | 
|city3 | 1 | 1 | 0 | 1 | 
+0

SELECT COUNT (id) AS-Anfragen, Stadt, YEAR (erstellt) als Jahr FROM Anfragen GROUP BY Stadt ich Probleme habe die Jahre zu trennen, wie verschiedene Spalten. Ich weiß wirklich nicht, wie man das macht – jocken

Antwort

1

Vielleicht so etwas wie folgt aus:

SELECT 
    YourTable.city, 
    SUM(IF(YEAR(created)=2009,1,0)) AS '2009', 
    SUM(IF(YEAR(created)=2010,1,0)) AS '2010', 
    SUM(IF(YEAR(created)=2011,1,0)) AS '2011', 
    SUM(IF(YEAR(created)=2012,1,0)) AS '2012' 
FROM 
    YourTable 
GROUP BY 
    YourTable.city 
+0

Das funktionierte, wenn Sie eine Klammer vor AS hinzufügten, aber es ist nicht sehr dynamisch. Ist es möglich, dass es automatisch erkennt, ob ein Jahr vorhanden ist und eine Spalte dafür erstellt? – jocken

+0

Ich denke nur mit dynamischen sql. Dies wäre so einfach, wenn Sie MSSQL 2005+ verwendet hätten. – Arion

0
sieht wie folgt aus

versuchen Sie folgendes:

select 
    city, 
    sum(case when year(created) = 2009 then 1 else 0 end) as 2009, 
    sum(case when year(created) = 2010 then 1 else 0 end) as 2010, 
    sum(case when year(created) = 2011 then 1 else 0 end) as 2011, 
    sum(case when year(created) = 2012 then 1 else 0 end) as 2012 
from 
    enquiries 
group by city 
Verwandte Themen