Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Abfrage mit zwei Kriterien

Begonnen von topspam, September 16, 2011, 16:51:23

⏪ vorheriges - nächstes ⏩

topspam

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

FirmenIDJahrAbsatz
12010200
22010100
32010150
12011240
32011120

Firmentabelle

IDFirma
1ABB
2BCC
3CCD

Output:

IDFirmaAbsatz 2011Absatz 2010
1ABB240200
2BCC100
3CCD120150

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
Gruss René

MzKlMu

#1
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]
Gruß Klaus

topspam

Hallo MzKlMu.

Besten Dank für die Antwort und die Lösung. Hat wunderbar funktioniert... Nun darf das Wochenende kommen... ;-)
Gruss René

topspam

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

FirmenIDJahrAbsatzAnzahl
120102002
220101006
320101504
120112407
320111209

Firmentabelle

IDFirma
1ABB
2BCC
3CCD

Output:

IDFirmaAbsatz 2011Absatz 2010Anzahl 2011Anzahl 2010
1ABB24020072
2BCC10006
3CCD12015094

Gruss René

topspam

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.
Gruss René

database

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]

topspam

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.
Gruss René