SQL Auswertung, doppelte Vorkommen innerhalb einer Tabelle

fischilein2

Grünschnabel
Hallo,

ich habe folgendes Problem (Access 2003). In einer Tabelle (t1) wird für ein z1 (s. Beispieltabelle) ein Eintrag pro Jahr gemacht (muss aber nicht!). Irgendwann möchte ich auswerten, für welche z1 es einen Eintrag in 2010 gibt und die noch nicht in 2011, bzw. 2012 angelegt wurden. Der SQL müsste also z1=2 und z1=3 für das Jahr 2011 zurückliefern

id | z1 | Jahr
1 | 1 | 2010
2 | 1 | 2011
3 | 2 | 2010
6 | 3 | 2010
7 | 4 | 2010
8 | 4 | 2011
9 | 4 | 2012

Ich habe es mit folgendem SQL versucht, aber der liefert nichts zurück:

SELECT DISTINCT t2010.id, t2010.z1
FROM
t1 as t2010
LEFT JOIN
t1 as t2011
ON
(
(t2010.z1 = t2011.z1) AND (t2010.Jahr = t2011.Jahr)
)

WHERE
(
(Exists
(
SELECT 1
FROM
t1 as t_alt
LEFT JOIN
t1 as t_neu
ON
(
(t_alt.z1 = t_neu.z1) AND (t_alt.Jahr = t_neu.Jahr)
)
WHERE t_neu.Jahr = 2011
)=False
)
);

Wenn jemand eine Lösung weiß, vielen vielen Dank
Schöne Grüße
fischilein
 
MS Access lässt leider keine Unterabfragem im FROM zu. Ich würde es über 2 Queries lösen. Im Ersten werden alle z1 ausgelesen die es gibt. Im Zweiten wird dieses Resultat mit allen z1 aus 2011 verglichen

SQL:
-- vw_all_z1_from_t    
SELECT DISTINCT z1
FROM t;


SELECT z1
FROM
    vw_all_z1_from_t
WHERE
    z1 NOT IN (SELECT z1 FROM t WHERE Jahr = 2011)
;

wahrscheinlich geht aber auch dies. hab grad kein Access zur Hand zum testen
SQL:
SELECT DISTINCT  z1
FROM    t
WHERE   z1 NOT IN (SELECT z1 FROM t WHERE Jahr = 2011)
 
Zuletzt bearbeitet von einem Moderator:
Zurück