MySQL Dubletten mit mehreren Kriterien


Status
Dieses Thema wurde gelöst! Zur Lösung gehen…
#1
Moin,

es geht darum Datensätze auszugeben, die mehr als 1 mal vorkommen. Das habe ich erfolgreich mit folgender Abfrage gelöst:

SELECT DOCUMENTNO, COUNT(*) as Anzahl FROM Archiv WHERE DOCUMENTNO is not null GROUP BY DOCUMENTNO HAVING COUNT(*)>1

Nun ist es so, dass ich ein weiteres Kriterium abfragen möchte. Es sollen nur die Dubletten ausgeworfen werden, bei denen der Dokumenttyp übereinstimmt.
D.h. Ich möchte nur ein Ergebnis erhalten, wenn die DOCUMENTNO bei einem Datensatz mit dem DOCUMENTTYPE Eingangsrechnung doppelt vorkommt.

Kann mir da evtl. jemand auf die Sprünge helfen?

Besten Dank vorab.
 
#3
Danke für die schnelle Antwort. Das bringt mich doch nicht weiter, oder?
Ich möchte ja, dass nur Datensätze ausgegeben werden wenn die DOCUMENTNO mehrfach vorkommt und zusätzlich nur dann, wenn der DOCTYPE übereinstimmt.

Die Rehnungsnummer 12345 darf an sich häufiger vorkommen, allerdings beim DOCUMENTTYPE Eingangsrechnung nur 1 mal. Es kann aber durchaus eine Lieferscheinnummer mit 12345 vorkommen.
 

Yaslaw

n/a
Moderator
#4
Was heisst, dass der "DOCTYPE übereinstimmt"? Mit was?

Was ich denke, was du suchst ist die Eindeutigkeit über DOCUMENTNO UND DOCTYPE
Also muss man auch über diese 2 Felder gruppieren.
SQL:
SELECT 
    DOCUMENTNO, DOCTYPE, COUNT(*) as Anzahl 
FROM Archiv 
WHERE 
    DOCUMENTNO is not null 
GROUP BY 
    DOCUMENTNO, DOCTYPE
HAVING COUNT(*)>1
Meinst du hingegen, der DOCTYPE muss mit irgend einem Wert (sagen wil mal 15) übereinstimmen, dann muss das in den WHERE.

SQL:
SELECT 
    DOCUMENTNO, COUNT(*) as Anzahl 
FROM Archiv 
WHERE 
    DOCUMENTNO is not null 
    AND DOCTYPE = 15
GROUP BY 
    DOCUMENTNO
HAVING COUNT(*)>1
 
#5
Was heisst, dass der "DOCTYPE übereinstimmt"? Mit was?
Aktuell ist es so, dass dennoch Lieferschein und Rechnung angezeigt werden, da diese, aufgrund der Zusammengehörigkeit, den gleichen Eintrag im Feld DOCUMENTNO haben.
Sie Unterscheiden sich jedoch im DOCUMENTTYPE.
Und ich möchte eben nur den Fall angezeigt bekommen, wenn ein Datensatz sowohl im DOCUMENTTYPE als auch in der DOCUMENTNO übereinstimmt.

Vielleicht mal zur Veranschaulichung...

Dieser Fall soll nicht gezeigt werden.

1.png

Der unterer Fall soll ausgeworfen werden.

2.png

Danke dir für deine Hilfe!
 
Zuletzt bearbeitet:
#9
Was spricht den gegen meine Lösung mit dem Gruppieren nach beiden Feldern?
Wenn ich das Teste, komme ich auf dein gewünschtes Resultat

Mein Test bei db-fiddle. Einfach öffnen und auf run klicken
DB Fiddle - SQL Database Playground
So funktioniert es. Ich habe es lediglich um das Feld DATE erweitert.


SELECT
DOCUMENTNO, DOCTYPE, DATE, COUNT(*) as Anzahl
FROM Archiv
WHERE
DOCUMENTNO is not null
GROUP BY
DOCUMENTNO, DOCTYPE, DATE
HAVING COUNT(*)>1

Danke dir für deine Hilfe!
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

Neue Beiträge