Matrix oder so ähnlich??? Bin am verzweifeln!

Hallo zusammen,

wer kann mir weiterhelfen??? ich dreh hier noch bald am rad. mein problem liegt darin, aus der tabelle gutschein mehrere spalten nebeneinander darzustellen. ihr seht unten im select, dass ich 2 spalten selecte. wunderbar. so soll das auch sein - jedoch sollen jetzt noch 2 spalten daneben. genau die gleichen spalten jedoch mit einem anderen datum (01.06.08 - 30.06.08). da es natürlich vorkommen kann, dass ich im juni mehr filialen habe als im mai sollen die noch fehlenden filialen im mai dann NULL sein.

ich versuche euch das einmal darzustellen:

Filialen Mai 08 Anzahl GS Mai 08 Filialen Juni 08 Anzahl GS Juni 08
20 100 20 118
30 115 30 120
35 NULL 35 176
41 165 41 100


Hier der Select:
select gs_kst as “Filialen Mai 08”, COUNT(gs_datum) as “Anzahl GS Mai 08”
from gutschein
where gs_datum between ‘01.05.08’ and ‘31.05.08’
and gs_kst between ‘1’ and ‘20’
group by gs_kst


ich hoffe ihr könnt mir weiterhelfen. wird das mit einer matrix oder doch besser mit einem union all gemacht? es wäre sehr nett wenn ihr mir den select dann hier einmal posten könntet. für 2 monate sollte das reichen. dann kann ich den rest selbst anpassen.

vielen dank schon einmal im vorraus.

gruß netbimbo

Nutze für sowas bitte die passende Code-Funktion.




test=# select * from filiale ;
   datum    | gutschrift
------------+------------
 2008-05-01 |         10
 2008-05-10 |         20
 2008-06-10 |         30
(3 rows)

test=# select sum(case when extract(month from datum)=5 then 1 else 0 end) as filiale_mai, sum(case when extract(month from datum)=5 then gutschrift else 0 end) as filiale_mai_gutschrift, sum(case when extract(month from datum)=6 then 1 else 0 end) as filiale_juni, sum(case when extract(month from datum)=6 then gutschrift else 0 end) as filiale_juni_gutschrift from filiale;
 filiale_mai | filiale_mai_gutschrift | filiale_juni | filiale_juni_gutschrift
-------------+------------------------+--------------+-------------------------
           2 |                     30 |            1 |                      30
(1 row)

hi,

zunächst einmal danke für die schnelle antwort. leider kann ich mit dem sql select nicht viel anfangen. sum(case when extract(month from datum)=5 sagt mir ehrlich gesagt gar nichts. kannst du mir den select einmal so anpassen wie auch meine felder heissen? in gs_kst stehen die filialen und in gs_datum halt das datum. die beiden spalten stehen in der tabelle gutschein. mein select von oben funktioniert ja. jedoch nur für 2 spalten.

das wäre richtig nett.

gruß netbimbo

die passende code funktion habe ich gar nicht gesehen. sorry. beim nächsten mal nutze ich die auf jeden fall.

sum(…) : macht eine Summe
case when … end eine Entscheidung, und zwar basierend darauf, was bei extract(…) rauskommt
extract(month from datum) extrahiert den Monat aus einem Datum. In Verbindung mit CASE wird also geschaut, ob der Monat = 5 (also Mai) ist. Falls das zutrifft, gilt das Feld gutschrift als Resultat, sonst 0. Und genau dieses Resultat wird, sieh oben, summiert.

kannst du mir den select einmal so anpassen wie auch meine felder heissen?

Das überlasse ich Dir zur Übung, Du willst doch hier was lernen, oder? Du mußt auch aufpassen, falls dort mehrere Jahre Daten sind, dann vermischt Du möglicherweise den Mai mehrere Jahre in eine Summe. Viel Erfolg noch bei den Hausaufgaben!


Andreas