Hallo Forumswelt.
Ich habe das Problem, dass ich eine Tabelle mit Absatzzahlen (aus verschiedenen Jahren) und eine Tabelle mit Abnehmern habe. Die beiden Tabellen sind über eindeutige ID's verknüpft. Nun möchte ich eine Abfrage erstellen, die mir die Firma, sowie die Absatzzahlen für die letzten zwei Jahre in je einer Spalte ausgibt. Bitte folgendes Illustrationsbeispiel beachten:
Absatztabelle
| FirmenID | Jahr | Absatz |
| 1 | 2010 | 200 |
| 2 | 2010 | 100 |
| 3 | 2010 | 150 |
| 1 | 2011 | 240 |
| 3 | 2011 | 120 |
Firmentabelle
Output:
| ID | Firma | Absatz 2011 | Absatz 2010 |
| 1 | ABB | 240 | 200 |
| 2 | BCC | | 100 |
| 3 | CCD | 120 | 150 |
Es kann durchaus vorkommen, dass Einträge leer sind (Firma BCC im Jahr 2011)
Eine einfache Lösung wäre,für jedes Jahr eine neue Tabelle zu benutzen, jedoch bin ich der Ansicht, dass es auch eine andere Möglichkeit geben sollte.
Mit Inner Join habe ich zwar Resultate erhalten, die sind aber falsch (statt 3 Einträge sind 5 ausgespuckt worden)
Besten Dank für eure Hilfe
Hallo,
ein Kreuztabellenabfrage sollte zum Ziel führen.
TRANSFORM First(Absatztabelle.Absatz)
AS ErsterWertvonAbsatz
SELECT Absatztabelle.FirmenID, Firmentabelle.Firma, Sum(Absatztabelle.Absatz)
AS [Gesamtsumme von Absatz]
FROM Absatztabelle
INNER JOIN Firmentabelle
ON Absatztabelle.FirmenID = Firmentabelle.FirmenID
GROUP BY Absatztabelle.FirmenID, Firmentabelle.Firma
PIVOT Absatztabelle.Jahr;
Ergebnis siehe Bild:
[Anhang gelöscht durch Administrator]
Hallo MzKlMu.
Besten Dank für die Antwort und die Lösung. Hat wunderbar funktioniert... Nun darf das Wochenende kommen... ;-)
Neue Woche, neue Frage:
Ich habe meine Absatztabelle um die Anzahl erweitert. Nun möchte ich nach dem selben Prinzip wie mit dem Absatz auch die Anzahl so hinbekommen.
Frage: Lässt sich das mit einer Kreuztabelle lösen oder muss ich zwei Kreuztabellen machen und diese dann irgendwie mergen?
Zur Veranschaulichung hier nochmals die Tabellen:
Absatztabelle
| FirmenID | Jahr | Absatz | Anzahl |
| 1 | 2010 | 200 | 2 |
| 2 | 2010 | 100 | 6 |
| 3 | 2010 | 150 | 4 |
| 1 | 2011 | 240 | 7 |
| 3 | 2011 | 120 | 9 |
Firmentabelle
Output:
| ID | Firma | Absatz 2011 | Absatz 2010 | Anzahl 2011 | Anzahl 2010 |
| 1 | ABB | 240 | 200 | 7 | 2 |
| 2 | BCC | | 100 | 0 | 6 |
| 3 | CCD | 120 | 150 | 9 | 4 |
Ich erachte das Thema als abgeschlossen aber noch ungelöst... Also, wenn es hier noch eine Idee geben sollte, bin ich daran interessiert... Ansonsten herzlichen Dank an MzKlMu für die obige Lösung.
Hallo,
versuch mal:
TRANSFORM First(Absatztabelle.Absatz) AS ErsterWertvonAbsatz
SELECT Absatztabelle.FirmenID, Firmentabelle.Firma, Sum(Absatztabelle.Absatz) AS [Gesamtsumme von Absatz],
Sum(IIf([Jahr]="2010",[Anzahl],0)) AS [Anz 2010], Sum(IIf([Jahr]="2011",[Anzahl],0)) AS [Anz 2011]
FROM Firmentabelle INNER JOIN Absatztabelle ON Firmentabelle.FirmenID = Absatztabelle.FirmenID
GROUP BY Absatztabelle.FirmenID, Firmentabelle.Firma
PIVOT Absatztabelle.Jahr;
HTH
[Anhang gelöscht durch Administrator]
Hallo database.
Besten Dank für diese Lösung. Das funktioniert genau so wie ich wollte.
Den Weg über die Summe ist einfach und genial.