SQL: Ausgabe doppelter Werte innerhalb einer Spalte unterdrücken

Aus DBWiki
Wechseln zu: Navigation, Suche

Zurück zur Übersicht



Mittels skalarer Unterabfrage kann entsprechend der anzuwendenden Sortierung ein Wert für den Datensatz angelegt werden, der dann in der Hauptabfrage in einem CASE-Ausdruck bzw. der IIf()-Funktion ausgewertet wird.


Es sollen z.B. für alle Mitarbeiter die abt_nr und der ma_name ausgegeben werden, wobei die abt_nr nur jeweils am Anfang der Liste erscheinen soll.

Lösung für Jet-SQL

Hinweis für Access-Anwender
Um die folgenden Abfragen selbst testen zu können, müssen die Tabellen der Übungsdatenbank vorhanden sein.

SELECT IIf( ma_nr = erste_ma_nr, v.abt_nr ) AS abt_nr,
       ma_name
FROM   ( SELECT abt_nr,
                ma_nr,
                ma_name,
                ( SELECT min( ma_nr )
                  FROM   mitarbeiter
                  WHERE  abt_nr = m.abt_nr ) AS erste_ma_nr
         FROM   mitarbeiter AS m ) AS v
ORDER  BY v.abt_nr, v.ma_nr

Lösung mittels Window Funktion

SELECT CASE WHEN ma_nr = erste_ma_nr THEN abt_nr ELSE NULL END AS abt_nr,
       ma_name
FROM   ( SELECT abt_nr,
                ma_nr,
                ma_name,
                MIN( ma_nr ) OVER ( PARTITION BY abt_nr ) AS erste_ma_nr
                FROM   mitarbeiter ) AS v
ORDER  BY v.abt_nr, ma_nr

Die Lösung kann in diesem DBFiddle eingesehen werden.

abt_nr ma_name
10 Kühne
(Null) König
(Null) Müller
20 Schmidt
(Null) Johann
(Null) Scheidt
(Null) Adam
(Null) Fuhrmann
30 Allard
(Null) Wecker
(Null) Mertens
(Null) Blank
(Null) Dreher
(Null) Jakobs



Zurück zur Übersicht