[MySQL] 3 Tabellen, aber wie?

Akii

Grünschnabel
Hallo zusammen,

ich hänge an einem größeren Problem und hoffe auf Eure Hilfe.
Ich habe 3 Tabellen:
1. Artikel, Spalten: [ID], [ArtName], ...
2. Lager, Spalten: [ID], [Name]
3. Artikelbewegung: [ID_fortlaufend], [LagerID], [ArtikelID], [Zugang], [Abgang]

Die Abfrage, an der ich atm hänge sollte mir eine neue Tabelle liefern, die in etwa so aussieht:
[ArtikelID], [SummeLager1], [SummeLager2], [SummeLager3], ...., [Summe über alle Lager]

Die Summe über alle Läger würde so funktionieren:
Code:
SELECT SUM(posten.Zugang - posten.Abgang) AS GesamtMenge
FROM artikelbewegung as posten Group by ArtikelID
aber ich bin echt planlos, wie ich die anderen Spalten in die gleiche neue Tabelle bekomme.

Hat einer von Euch die zündende Idee?
(danke)

PS: Schön wäre noch, wenn die Spaltenbezeichnung der SummeLagerX den Namen aus der Tabelle Lager hätte.
 
Pivot oder Cosstable. Beides ist nicht flexibel von MySQL unterstützt.


SQL:
SELECT
  artikelid,
  SUM(IF(lagerid = 1, (posten.Zugang - posten.Abgang), 0) AS sum_lager_1,
  SUM(IF(lagerid = 2, (posten.Zugang - posten.Abgang), 0) AS sum_lager_2,
  SUM(IF(lagerid = 3, (posten.Zugang - posten.Abgang), 0) AS sum_lager_3,
  ...
FROM
  Artikelbewegung
GROUP BY
  artikelid;
 
Zuletzt bearbeitet von einem Moderator:
Danke für Deine Antwort Yaslaw. Was heißt nicht "flexiebel" unterstützt, bzw. wie würde so eine Afrage in einer SQL-Anweisung aussehen, wenn dies die DB unsterstützt?

Dein Vorschlag mit einer if-Anweisung für jedes Lager klappt insofern nicht, als es n-Lager gibt und diese sich auch fortlaufend ändern können.
 
So, nach weiterer Suche im Internet, hab ich eine Lösung gefunden, die mir die Daten zwar nicht in Spalten, jedoch in Zeilen ausgibt. Vielleicht kann das ja einer von Euch mal brauchen:
Code:
SELECT
lag.Name as Lager, art.Name as Artikel, 
SUM(posten.Zugang - posten.Abgang) AS Menge 
FROM artikel as art, ager as lag, artikelbewegung as posten 
where 
posten.LagerID=lag.ID AND 
posten.ArtikelID=art.ID <weitere ANDs>
Group by posten.colLagerID, posten.colArtikelID

Wollte man die Abfrage weiter spezialisieren, könnte man bei <weitere ANDs> z.B. noch hinzufügen:
Code:
 AND lag.ID=1
oder
Code:
 AND art.ID=1
 
Wenn du die Tabelle noch transponieren (umkehren, Spalten <--> Zeilen) willst, kannst du das über PHP lösen.

In einer While-Schleife alle Ergebnisse in einen Array laden und diesen später transponiert per Schleife ausgeben.

Gruß
 
Danke für den Tipp, aber von PHP bin ich weit entfernt.
Ich sag nur: Ich verwende den .NET-Connector :)
 
Dann geh ich mal davon aus, dass du mit C# (oder einer ähnlichen Programmiersprache) arbeitest. Das Prinzip solltest du dort auch anwenden können.
 

Neue Beiträge

Zurück