2017-02-20 8 views
0

Ich bin wie so eine Abfrage in MySQL Ausführen ...MySQL Schwenken und Zuweisen von benutzerdefinierten Spaltennamen

select employee_id, sale_date, count(id) 
from sales 
group by employee_id, extract(year_month from sale_date); 

Die Daten zurück kommt wie ...

1 1/1/2014 5 
1 2/1/2014 6 
1 3/1/2014 4 
2 1/1/2014 4 
2 2/1/2014 10 
2 3/1/2014 0 
3 1/1/2014 0 
3 2/1/2014 0 
3 3/1/2014 8 

ich diese Tabelle schwenken und Anzeige in folgendem Format, was ich tun möchte, ist

ID Jan Feb Mar 
1  5  6  4 
2  4  10  0 
3  0  0  8 

in der folgenden Tabelle ein, was ich will, ist die Spaltennamen, die auf den m entsprechen onth. Wenn Sie in der Mitte des Jahres sind, möchte ich die 1. Spalte in welchem ​​Monat auch immer Sie sind, nicht Jan.

Wie zu meiner Frage - ist es irgendwie möglich, den Namen der Spalte festzulegen dynamisch innerhalb derselben SQL-Anweisung? Da ich es geschwenkt habe, kann ich den Monatsnamen extrahieren, mir fehlt gerade ein Schritt, den Spaltennamen tatsächlich zu schreiben.

+0

Können Sie uns alles zeigen, ohne den fehlenden Schritt? – Strawberry

Antwort

2

Nein. Der Spaltenname oder Spaltenalias kann nicht dynamisch während der Ausführung einer SQL SELECT-Anweisung geändert werden.

So eine Abfrage, die das Ergebnis in der Frage gezeigt erzeugt, mit den Spaltennamen, bräuchten wir eine SQL-Anweisung auszuführen, die etwa wie folgt aussieht:

SELECT id AS `ID` 
    , expr AS `Jan` 
    , expr AS `Feb` 
    FROM ... 

Diese Anforderung ist, weil, wie SQL arbeitet . Führt zu einer hübschen Grundregel: Die Bezeichner (z. B. Tabellennamen, Spaltennamen, Spaltenaliasnamen) müssen im SQL-Text angegeben werden.

Es wäre möglich, eine Anweisung wie die obige als vorherigen Schritt dynamisch zu erstellen. Und es ist möglich, eine andere, separate SQL-Anweisung zu verwenden, um Ihnen dabei zu helfen. Das Ziel der Vorschritte wäre, eine Anweisung wie die obige zu generieren, um einen Spaltenalias zu erhalten. Was das betrifft, wurde diese Frage in StackOverflow mehrfach gestellt.

Während es möglich ist, eine dynamisch generierte SQL-Anweisung zu erhalten, kann das Pivotieren und Aliasing häufig in SQL vermieden und stattdessen im Client verarbeitet werden.

Verwandte Themen