SQL-Abfrage ändern bzw. umformulieren
Hallo zusammen,
wir haben in unserer Firma zwei voneinander getrennte Kundendatenbanken in eine umgewandelt. Nun haben wir eine gewisse Anzahl von Dubletten in dieser Datenbank und versuchen nun diese herauszufiltern. In der einen Datenbank beginnen die Kundennummern mit einer 17, in der anderen Datenbank beginnen die Kundennummern mit einer 19. Nachfolgend meine SQL-Abfrage:
select count (*) as doppelt, name1, plz, strasse
from kunden
where (kundnr LIKE '17%'
OR kundnr LIKE '19%')
AND Aktivflag = 1
having count (*) > 1
group by name1, plz, strasse
order by doppelt desc, name1
In dieser Abfrage werden dann alle Kunden herausgefiltert, welche den selben Namen, PLZ und Strasse haben. Wenn ich jedoch noch zusätzliche Informationen zu den Kunden haben möchte, müsste ich in der Select-Anweisung mehr Spalten hinterlegen, was wiederrum das Ausgabeergebnis verringert.
Das optimale Ergebnis sollte so sein:
Kunde PLZ Strasse Spalte1 Spalte2 Spalte3
Horst 94491 Weg 1 abc def ghi
Horst 94491 Weg 1 xyz ghi tzu
Horst 94491 Weg 1 jkl zui tzu
Xaver 94469 Ort 2 rts qwe asd
Xaver 94469 Ort 2 ert hjk sdf
Die-SQL-Abfrage soll alle mehrfach angelegten Kunden ausgeben, welche den gleichen Namen, PLZ und Strasse haben. Zusätzlich sollten noch beliebig viele Spalten angegeben werden können.
Datenbank: Oracle 10g (10.2.0.3)
Bin für jede Hilfe dankbar.
mfg
JosefSepp
wir haben in unserer Firma zwei voneinander getrennte Kundendatenbanken in eine umgewandelt. Nun haben wir eine gewisse Anzahl von Dubletten in dieser Datenbank und versuchen nun diese herauszufiltern. In der einen Datenbank beginnen die Kundennummern mit einer 17, in der anderen Datenbank beginnen die Kundennummern mit einer 19. Nachfolgend meine SQL-Abfrage:
select count (*) as doppelt, name1, plz, strasse
from kunden
where (kundnr LIKE '17%'
OR kundnr LIKE '19%')
AND Aktivflag = 1
having count (*) > 1
group by name1, plz, strasse
order by doppelt desc, name1
In dieser Abfrage werden dann alle Kunden herausgefiltert, welche den selben Namen, PLZ und Strasse haben. Wenn ich jedoch noch zusätzliche Informationen zu den Kunden haben möchte, müsste ich in der Select-Anweisung mehr Spalten hinterlegen, was wiederrum das Ausgabeergebnis verringert.
Das optimale Ergebnis sollte so sein:
Kunde PLZ Strasse Spalte1 Spalte2 Spalte3
Horst 94491 Weg 1 abc def ghi
Horst 94491 Weg 1 xyz ghi tzu
Horst 94491 Weg 1 jkl zui tzu
Xaver 94469 Ort 2 rts qwe asd
Xaver 94469 Ort 2 ert hjk sdf
Die-SQL-Abfrage soll alle mehrfach angelegten Kunden ausgeben, welche den gleichen Namen, PLZ und Strasse haben. Zusätzlich sollten noch beliebig viele Spalten angegeben werden können.
Datenbank: Oracle 10g (10.2.0.3)
Bin für jede Hilfe dankbar.
mfg
JosefSepp
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 123446
Url: https://administrator.de/contentid/123446
Ausgedruckt am: 19.11.2024 um 19:11 Uhr
4 Kommentare
Neuester Kommentar
Moin JosefSepp,
für Deine Anforderung brauchst du ja noch einen Join mehr:
[ungetestet]
Grüße
Biber
[Edit] Tippfehlerkorrektur: "name1" statt "kunde" und "strasse" statt "str" beim group by. [/Edit]
[Edit2] Jetzt noch mit dem überlesenen ORDER BY DoppelCOUNT:
[/Edit2]
für Deine Anforderung brauchst du ja noch einen Join mehr:
SELECT k.* FROM Kunden k,
(select count (*) as doppelt, name1, plz, strasse
from kunden
where (kundnr LIKE '17%'
OR kundnr LIKE '19%')
AND Aktivflag = 1
having count (*) > 1
group by name1, plz, strasse
) doppelkunde
WHERE
K.name1=doppelkunde.kunde AND
k.Plz=doppelkunde.plz AND
k.Strasse=doppelkunde.strasse
ORDER BY k.name1, K.plz, k.strasse, k.kundnr
[
Grüße
Biber
[Edit] Tippfehlerkorrektur: "name1" statt "kunde" und "strasse" statt "str" beim group by. [/Edit]
[Edit2] Jetzt noch mit dem überlesenen ORDER BY DoppelCOUNT:
SELECT doppelkunde.doppelt, k.* FROM Kunden k,
(select count (*) as doppelt, name1, plz, strasse
from kunden
where (kundnr LIKE '17%'
OR kundnr LIKE '19%')
AND Aktivflag = 1
having count (*) > 1
group by name1, plz, strasse
) doppelkunde
WHERE
K.name1=doppelkunde.kunde AND
k.Plz=doppelkunde.plz AND
k.Strasse=doppelkunde.strasse
ORDER BY doppelkunde.doppelt, k.name1, K.plz, k.strasse, k.kundnr
Hallo,
dein Problem ist, dass du alle Spalten, die im SELECT stehe auch im GROUP haben musst? Und dann nur noch die Ausgegeben bekommst, die tatsächlich _alles_ gleich haben (auch die zusätzlichen Spalten, die du einfach informativ ausgeben willst)? Dann solltest du aus count(*) ein count(strasse) machen.
Gruß
Filipp
dein Problem ist, dass du alle Spalten, die im SELECT stehe auch im GROUP haben musst? Und dann nur noch die Ausgegeben bekommst, die tatsächlich _alles_ gleich haben (auch die zusätzlichen Spalten, die du einfach informativ ausgeben willst)? Dann solltest du aus count(*) ein count(strasse) machen.
Gruß
Filipp