Kreutztabelle aus 3 Tabellen

Meister_Knobi

Aktiver Benutzer
Beiträge
27
Hallo,

ich möchte aus 3 Verschiedenen Tabellen eine Kreutztabelle erstellen. Nehm ich zumindest an das diese Art so heißt.

Zuerst habe ich da die Tabelle ARTIKEL wo ich die Nr, Text, Preis das bekomme ich auch einfach hin (wäre zimlich schlecht wenn nicht)

Dann brauche ich pro ARTIKEL.Nr aus der Tabelle Preise Die verschiedenen VKPreise. In einem Datensatz dieser Tabelle ist jeoch immer nur ein Verkaufspreis mit einer Verkaufskategorie gespeichert. Mögliche Kategorien sind A bis H, können jedoch mehr werden. Die VKPreise A-H brauche ich nun neben einander in der Fertigen Tabelle.

Zu guter letzt brauche ich dann noch aus der Tabelle ArtikelUmsatz die Umsätze pro ArtNr in den Jahren 2011 2012 und 2013 einzeln.

Ich bin in Sachen SQL doch eingerosteter als ich gedacht hab. Ich hoffe hier kann mir jemand helfen.



Morgen reiche ich eine Struktur der benutzen Tabellen nach. Hab leider jetzt keine Zeit mehr.
 
Werbung:
Hallo,

ich möchte aus 3 Verschiedenen Tabellen eine Kreutztabelle erstellen. Nehm ich zumindest an das diese Art so heißt.

Schlimm, schlimm. vermutlich hast und suchst du sowas:

Code:
test=*# select * from artikel ;
 id | name
----+------
  1 | art1
  2 | art2
(2 rows)

Time: 0,159 ms
test=*# select * from preise ;
 artikel | kat | preis
---------+-----+-------
  1 |  1 |  10
  1 |  2 |  12
  2 |  2 |  22
  2 |  3 |  23
(4 rows)

Time: 0,152 ms
test=*# select a.name, sum(case when p.kat=1 then p.preis else 0 end) as kat1, sum(case when p.kat=2 then p.preis else 0 end), sum(case when p.kat = 3 then p.preis else 0 end) from artikel a left join preise p on a.id=p.artikel group by a.name order by a.name;
 name | kat1 | sum | sum
------+------+-----+-----
 art1 |  10 |  12 |  0
 art2 |  0 |  22 |  23
(2 rows)

test=*# select a.name, sum(case when p.kat=1 then p.preis else 0 end) as kat1, sum(case when p.kat=2 then p.preis else 0 end) as kat2, sum(case when p.kat = 3 then p.preis else 0 end)as kat3 from artikel a left join preise p on a.id=p.artikel group by a.name order by a.name;
 name | kat1 | kat2 | kat3
------+------+------+------
 art1 |  10 |  12 |  0
 art2 |  0 |  22 |  23
(2 rows)
 
Werbung:
Nicht so ganz, hat mir aber trozdem weiter geholfen. Danke.
"case when" ist für mich neu, hat mir sehr geholfen.

Nur mein eigentliches Ziel habe ich trozdem nicht erreicht. Ich wollte alle Ergebnisse in EINER Tabelle

Nur wenn ich die ersten beiden Tabellen verbinde erhalte ich einen Fehler:
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).

Meine Abfrage:
SELECT
a.ARTIKELNR,
a.ARTTEXT,
a.KALKEK,
sum( case when p.PREISLST=0 then p.MATERIAL else 0 end) as Preis01
FROM
ARTIKEL as a
LEFT JOIN
PREISE as p
ON
a.ARTIKELNR = p.ARTIKELNR
GROUP BY
a.ARTIKELNR
ORDER BY
a.ARTIKELNR;


Und noch ne frage, sind in der Abfrage Schleifen möglich? würde gerne die "sum( case when p.PREISLST=0 then p.MATERIAL else 0 end) as Preis01"-Zeile mit einer solchen gerne Hochzählen.
 
Zurück
Oben