Neuigkeiten:

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

Mobiles Hauptmenü

JOIN mit Teilergebnissen aus einer Tabelle

Begonnen von Collector_X, April 09, 2012, 13:29:53

⏪ vorheriges - nächstes ⏩

Collector_X

Hallo,

ich bräuchte Hilfe weil ich hier eine Nuss zu knacken habe die mir zu hart ist (Access Anfänger). Ich habe EINE Tabelle die pro Jahr, Quartal und Abrechnungsziffer eine Anzahl enthält. Ich möchte nun zwei vorgegebene Quartale vergleichen. Im Beispiel unten 2011 Q1 mit 2012 Q1.

Tabelle:


Jahr Quartal Ziffer Anzahl
2011       1   1000     10
2011       1   1001      5
2011       2   1000      3
2012       1   1000      7
2012       1   1003     20
2012       3   1000      5


Gewünschtes Ergebnis


Jahr Quartal Ziffer Anzahl Jahr Quartal Ziffer Anzahl
2011       1   1000     10 2012       1   1000      7
2011       1   1001      5
                           2012       1   1003     20


Mit einem LEFT/RIGHT/INNER JOIN erhalte ich ein entsprechendes Ergebnis für alle Ziffern die im Jahr 2011 UND 2012 einen Wert für Anzahl haben. Für die beiden anderen Konstellationen (nur Wert in 2011 oder nur Wert in 2012) allerdings habe ich keine Lösung. Ich habe auch mit UNION experimentiert, leider vergebens, ich erhalte immer nur folgendes Ergebnis:


Jahr Quartal Ziffer Anzahl Jahr Quartal Ziffer Anzahl
2011       1   1000     10 2012       1   1000      7


Mit:


SELECT T1.*, T2.*
FROM   ABRECHNUNG AS T1
       LEFT JOIN ABRECHNUNG AS T2
       ON T1.GNR = T2.GNR
WHERE  (T2.Jahr = 2012 AND T2.Quartal=1 AND T1.Jahr = 2011 AND T1.Quartal = 1) OR (T2.Jahr Is NULL AND T2.Quartal Is NULL)
UNION SELECT T1.*, T2.*
FROM   ABRECHNUNG AS T1
       RIGHT JOIN ABRECHNUNG AS T2
       ON T1.GNR = T2.GNR
WHERE  (T2.Jahr = 2012 AND T2.Quartal=1 AND T1.Jahr = 2011 AND T1.Quartal = 1) OR (T1.Jahr Is NULL AND T1.Quartal Is NULL);


Hier der Link auf die DB in Dropbox: http://dl.dropbox.com/u/53889920/Praxis-Auswertungen_003.mdb

Hat mir jemand eine Lösung?

Vielen Dank, Till

Wurliwurm

Dein Problem ist ein Standardproblem. Mit SQL allein ist das nicht lösbar, weil das SQL das "Gitter" (~Gewünschtes Ergebnis) nicht kennt, sondern nur aufaddieren kann, was da ist.

Die Lösung dafür ist eine Zwischentabelle, die das Gitter repräsentiert. Es wird bei jedem Aufruf der Auswertung die Tabelle komplett zurückgesetzt, das leere Gitter aufgebaut und dann über die beiden Abfragen neu gefüllt. Dazu bedarf es Programmierschleifen.

MzKlMu

Hallo,
siehe auch hier:

http://www.office-loesung.de/ftopic520615_0_0_asc.php
Gruß Klaus