MySQL Datenbankeinträge als Spaltenname

hi, ich habe eine tabelle mit den spalten: Monat, Artikel, Menge. Es gibt 7 verschiedene Artikel.

jetzt suche ich eine abfrage, die das wie folgt anzeigt:

Monat Artikel1 Artikel2 … Artikel7
01/2009 3555 15840 41561
02/2009 16741 158 5982

in der spalte artikel sollen dann die mengen stehen.

hoffe es hat jemand ne idee :smile:

Hi,

was Du willst ist eigentlich eine Kreuz-Tabelle.
Das wirst Du mWn mit reinem SQL nicht hinbekommen (außer MySQL bietet da Features an).

Toi, toi, toi,
Heinz

erstmal danke!
soweit ich weiß, müsste das aber irgendwie gehen. hab ich jedenfalls so gesagt bekommen. ich weiß nur nicht wie und bin seit heut morgen am überlegen und ausprobieren

Dann sind es wahrscheinlich MySQL-Spezifika. Da hab ich keine Ahnung.

Hallo gavino,

meinst du so etwas:

select
monat,
case when Artikel = ‚Artikel1‘ then menge else 0 end as ARTIKEL1,
case when Artikel = ‚Artikel2‘ then menge else 0 end as ARTIKEL2 etc.???

Ich hoffe, das hilft dir weiter.

LG
rs71

Hi gavino,

Select * from MeinTabellennamen

Grüße

Bernd

tut mir leid, kann ich Dir nicht helfen

Hallo,

Sorry für die späte Antwort.

Ich denke das kannst du nicht direkt so abfragen, dein Ergebnis wird so aussehen:

Monat Artikel Zahl
01/2009 Artikel 1 3555
01/2009 Artikel 2 15840
01/2009 Artikel 7 41561
02/2009 Artikel 1 16741
02/2009 Artikel 2 158
02/2009 Artikel 7 5982

Die zweidimensionale Darstellung ist dann eine Sache der Applikation.

Ich kenne keine Möglichkeit das Ergebnis wie du es suchst über SQL zu bekommen. Über mehrfache Self-Joins ginge es zwar, aber nur wenn alle Artikeln bekannt sind.

Schöne Grüße, Robert

danke für die antwort! du sprichst genau das an, was ich gesucht habe. über mehrere self-joins ginge es, da ich alle artikel kenne, es sind nur 7 stück.
ich habs bisher allerdings immer noch nicht geschafft, eine funktionierende abfrage zu erstellen

Hallo,

Was spricht dagegen das über SQL normal abzufragen und dann in der Applikation entsprechend darzustellen?

Von dem Self-Join würde ich dringendst abraten. Bei 7 Artikeln wird das schon sehr langsam sein bzw. Ressourcen verbrauchen.

Aber vom Prinzip her ging es so:

SELECT monat, art1.menge, art2.menge
FROM tabelle AS art1
INNER JOIN tabelle AS art2
ON art1.monat=art2.monat
WHERE art2.artikel=„Artikel2“ AND art2.artikel=„Artikel2“

Über ein AS kannst du die Spalten auch noch entsprechend benennen (z. B. art1.menge AS artikel1).

Schöne Grüße, Robert

In meinem letzten Post war noch ein Fehler, es sollte so aussehen:

WHERE art1.artikel=„Artikel1“ AND art2.artikel=„Artikel2“

Schöne Grüße, Robert

danke!
funktioniert ohne probleme :smile:

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]