SQL Abfrage in der eine (vorherige) Abfrage ausgeschlossen wird

Andey

Benutzer
Beiträge
5
Hallo,
ich bin absolut neu hier und hoffe, dass ich hier richtig bin :)

Ich habe folgende Abfrage:

Code:
SELECT DISTINCT kd.KD_NR AS Kunde, kd.KD_Adresse AS Adresse, az.TEXT
FROM DB.KUNDEN kd
INNER JOIN DB.ANZEIGE az
ON
kd.KD_PKEY = az.AZ_FKEY
WHERE az.TEXT LIKE '%Weih%23%'


Somit finde ich alle Kunden, die an der Weihnachtsaktion 2023 mitgemacht haben. Das gleiche funktioniert natürlich auch mit dem Jahr 2022.

Gibt es allerdings eine Möglichkeit, wenn ich die Abfrage für 2022 mache - automatisch diejenigen nicht anzuzeigen, die bereits in der "23" Abfrage enthalten waren?
Wichtig wäre auch, dass die Abfrage für 2023 als erste erfolgen soll, dann die für 2022, dann die für 2021... jedes mal sollen die Schnittmengen nicht mehr mit angezeigt werden...

Mit "NOT LIKE" kommt man da nicht wirklich weiter und hier mein Wissen leider auch schon xD

Für einen kleinen Schubs in die richtige Richtung wäre ich wirklich dankbar
 
Werbung:
Macht man typischerweise mit NOT EXISTS

Code:
SELECT DISTINCT kd.KD_NR AS Kunde, kd.KD_Adresse AS Adresse, az.TEXT
FROM DB.KUNDEN kd
  INNER JOIN DB.ANZEIGE az ON kd.KD_PKEY = az.AZ_FKEY
WHERE az.TEXT LIKE '%Weih%23%'
  and not exists (select *
                  from db.anzeige az2 
                  where kd.kd_pkey = az2.az_fkey
                  and az2.text like '%Weih%22%')
 
Werbung:
Wenn man die Jahresinformation sauber ausließt, kann man damit auch eine sehr dynamische Abfrage bauen:
Code:
SELECT    t.Kunde,
        t.Adresse,
        max(t.Jahr) AS Jahr
FROM    (

SELECT    kd.KD_NR AS Kunde,
        kd.KD_Adresse AS Adresse,
        left(
            right(
                right(az.TEXT,len(az.TEXT)-patindex('%Weih%',az.TEXT)-3)
            ,len(
                right(az.TEXT,len(az.TEXT)-patindex('%Weih%',az.TEXT)-3)
            )-patindex('%[0-9][0-9]%',
                right(az.TEXT,len(az.TEXT)-patindex('%Weih%',az.TEXT)-3)
            )-1)
        ,2) AS Jahr
FROM    DB.KUNDEN kd
INNER JOIN DB.ANZEIGE az
ON        kd.KD_PKEY = az.AZ_FKEY
WHERE    az.TEXT LIKE '%Weih%[0-9][0-9]%'

    ) t
GROUP BY t.Kunde,t.Adresse
left(),right() und patindex() sind jetzt MSSQL, ich denke aber, sowas gibt es bei Oracle auch.
 
Zurück
Oben