none
SQL-Abfrage - Filtern möglich RRS feed

  • Frage

  • Hallo Zusammen,

    ich komme bei einem SQL-Statement nicht weiter. Ich habe eine Umsatztabelle, in welcher Kundennummer, Geschäftsbereich und Auftragsumsätze stehen. In einer zweiten Tabelle wird der Kundennummer ein Name zugeordnet. Beispiel:

    Mit

    SELECT DISTINCT a.Kundennummer, b.Kurzname, a.Geschaeftsbereich
    FROM scoffice.dbo.Umsaetze AS a, scoffice.dbo.Kontakte AS b
    WHERE a.Kundennummer=b.KontaktNummer
    ORDER BY Kundennummer ASC

    bekomme ich folgendes Ergebnis:

    Ist es möglich, diese Tabelle zu filtern, das mir nur die Kunden angezeigt werden, welche noch nie bei dem Geschäftsbereich "Bürobedarf" gekauft haben? Beispiel: Kunde A hat bei Bürobedarf und Büromaschinen gekauft, also wird er nicht gelistet. Kunde B hat bei Büromaschinen und Büromöbel gekauft, also wird er gelistet.

    Grüße Jan

    Freitag, 4. Oktober 2019 11:23

Antworten

  • Hallo Jan,

    die kannst Du einfach mit NOT EXISTS rausfiltern =>

    SELECT DISTINCT a.Kundennummer, b.Kurzname, a.Geschaeftsbereich FROM scoffice.dbo.Umsaetze AS a INNER JOIN scoffice.dbo.Kontakte AS b ON a.Kundennummer=b.KontaktNummer WHERE NOT EXISTS (SELECT 1 FROM coffice.dbo.Umsaetze AS SUB
    WHERE SUB.Kundennummer = a.Kundennummer and SUB.Geschaeftsbereich = 'Bürobedarf') ORDER BY Kundennummer ASC

    P.S.: Old-Style JOINS sollte man vermeiden, das ist von MS abgekündigt und ab einer bestimmte SQL Version wird das dann nicht mehr unterstützt.


    Olaf Helper

    [ Blog] [ Xing] [ MVP]



    • Bearbeitet Olaf HelperMVP Freitag, 4. Oktober 2019 12:10
    • Als Antwort markiert Jan_dBF Freitag, 4. Oktober 2019 12:58
    Freitag, 4. Oktober 2019 12:05

Alle Antworten

  • Hallo Jan,

    die kannst Du einfach mit NOT EXISTS rausfiltern =>

    SELECT DISTINCT a.Kundennummer, b.Kurzname, a.Geschaeftsbereich FROM scoffice.dbo.Umsaetze AS a INNER JOIN scoffice.dbo.Kontakte AS b ON a.Kundennummer=b.KontaktNummer WHERE NOT EXISTS (SELECT 1 FROM coffice.dbo.Umsaetze AS SUB
    WHERE SUB.Kundennummer = a.Kundennummer and SUB.Geschaeftsbereich = 'Bürobedarf') ORDER BY Kundennummer ASC

    P.S.: Old-Style JOINS sollte man vermeiden, das ist von MS abgekündigt und ab einer bestimmte SQL Version wird das dann nicht mehr unterstützt.


    Olaf Helper

    [ Blog] [ Xing] [ MVP]



    • Bearbeitet Olaf HelperMVP Freitag, 4. Oktober 2019 12:10
    • Als Antwort markiert Jan_dBF Freitag, 4. Oktober 2019 12:58
    Freitag, 4. Oktober 2019 12:05
  • Hallo Jan,

    Die Tabelle Kontakte, so kann ich nur raten, soll einen Spalte Kundennummer haben? Ist dem so.

    Dann schau mal ob das hier geht:


    SELECT 
    DISTINCT um.Kundennummer, um.Kurzname, um.Geschaeftsbereich
    FROM scoffice.dbo.Umsaetze  um
    left join  scoffice.dbo.Kontakte ko on um.Kundennummer= ko.Kundennummer
    where ko.kundennummer is null
    and um.Geschaeftsbereich='Bürobedarf'
    ORDER BY um.Kundennummer ASC


    Nur, hier wird die Tabelle Kontakte abgefragt. Um die Kunden zu ermitteln hat es bestimmt die Kundenstammtabelle?
    Aktuell erhälst Du (nur) die Kunden, mit einem Kontakt, die nie einen Umsatz im Geschäftsbereich Bürobedarf gemacht haben. 
    Willst Du das wirklich?

    HTH
    Grüße Alexander

    Freitag, 4. Oktober 2019 12:10
  • Hallo Olaf,

    hallo Alexander,

    die Lösung von Olaf gibt mir das raus, was ich brauche. Vielen Dank für eure schnelle Antwort und Hilfe.

    Grüße Jan

    Freitag, 4. Oktober 2019 12:58