-
per SQL oder RPG doppelte Texte ermitteln
Hallo Zusammen,
ich schreibe Auftragstexte in eine Datei.
Felder sind: Auftragsnummer, Text
4711 Zeile1
4711 Zeile2
4711 Zeile3
4712 Zeile1
4713 Zeile1
4713 Zeile2
...
Jeder Auftrag kann beliebig viele Zeilen haben.
Ich möchte herausfinden, bei welchen Aufträgen der komplette Text identisch ist (Anzahl der Zeilen und Inhalt)
-
select Text, count(*) from TextTable
Group by Text
oder
select Text, count(*) from TextTable
Group by Text
having count(*) > 1
Da es unterschiedliche Schreibweisen geben könnte:
select hugo.*, count(*) from (
select upper(replace(Text, ' ', '')) from TextTable
) hugo
Group by Text
-
Ich würde zunächst die Texte pro Auftrag (über alle Zeilen) ermitteln.
Im nächsten Schritt würde ich dann feststellen, welche Texte mehrfach vorkommen.
Und zum Schluss dann die Aufträge mit den mehrfachvorkommenden Texten ausgeben.
Etwa so:
Code:
With x as (Select Auftrag, ListAgg(Trim(Text), '') TextProAuftrag
from YourTable
group by Auftrag),
y as (Select TextProAuftrag
from x
Group By TextProAuftrag
Having Count(*) > 1)
Select Auftrag, x.TextProAuftrag
from y join x on y.TextProAuftrag = x.TextProAuftrag
Order BY TextProAuftrag;
Sollte das IBM i Release so alt sein, dass LISTAGG nicht vorhanden ist, kann man sich mit einer Rekursion behelfen oder sich seine eigene Funktion schreiben, beides ist auf alle Fälle um einiges aufwändiger.
... allerdings weniger aufwändig als das gleiche mit reinem RPG zu schreiben.
Birgitta
-
Bin mir jetzt unsicher ob ich das falsch verstanden habe, aber trotzdem hier:
Select Auftragsnummer from Auftragsdatei
where exists (select b.auftragsnummer from Auftragsdatei b
where b.text not in (Select c.text from Auftragsdatei c)
SQL von hinten lesen, sonst blickt man schwer durch!
-
Die Antwort von Birgitta trifft die Sache auf den Kopf. Danke dafür.
LISTAGG war mir nicht bekannt. Funktioniert aber super. So kann ich herausfinden welche Texte im ganzen doppelt sind. Es reicht mir ja nicht zu wissen, dass eine Textzeile auch in einem anderen Auftrag vorkommt aber die anderen Zeilen unterschiedlich sind.
Problem gelöst.
DANKE
-
Birgitta vergleicht die kompletten Auftragstexte zueinander, da ListAgg die Texte aneinander kettet.
Daher wird da zu deinem Beispiel nichts bei rauskommen.
" bei welchen Aufträgen der komplette Text identisch ist (Anzahl der Zeilen und Inhalt "
4711 Zeile1 Zeile2 Zeile3
4712 Zeile1
4713 Zeile1 Zeile2
Dein SQL hilft da auch nicht, da:
where b.text not in (Select c.text from Auftragsdatei c)
sich selber nicht ausschließt, da b.Text in C.Text ja vorhanden ist. Hier sollte u.U. b.Auftrag <> c.Auftrag eingeschlossen werden.
Noch mal die Frage:
Sollen nur gleiche Zeilen oder gleiche Texte ermittelt werden?
Du könnstest auch
select Text, count(distinct Auftrag)
from Auftragstexte
having count(distinct Auftrag) > 1
verwenden um doppelte Zeilen zu ermitteln. Dieses Ergebnis mit sich selber verjoint ergibt dann die Aufträge:
select * from (
select Text, count(distinct Auftrag)
from Auftragstexte
having count(distinct Auftrag) > 1
) h
inner join Auftragstexte A
h.Text = A.Text
-
Select Auftragsnummer from Auftragsdatei
where exists (select b.auftragsnummer from Auftragsdatei b
where b.text not in (Select c.text from Auftragsdatei c where c.auftragsnummer <> b.auftragsnummer)
@fuerchau: absolut korrekt! Dann müsste der sql aber passen.
-
Ein Auftrag kann beliebige Zeilen Text haben. In meinem Beispiel besteht Auftrag 4711 aus 3 Zeilen Text. Ich möchte wissen, welche Aufträge den identischen Text haben. Und zwar identisch in der Anzahl der Zeilen und identisch im Inhalt. In meinem Beispiel gibt es keine identischen Aufträge, da der Text "Zeile 1" zwar in mehreren Aufträgen vorkommt, aber z.B. bei Auftrag 4713 die 3. Zeile fehlt.
Vielleicht hätte ich besser klarmachen sollen, dass es mir NICHT reicht, in welchen Aufträgen die Textzeile "Zeile 1" vorkommt, sondern ich möchte den kompletten Text eines Auftrags vergleichen.
Anzahl der Textzeilen und Inhalt der Textzeilen müssen identische sein. Und das bringt mir der ListAgg
Similar Threads
-
By pabloesco in forum IBM i Hauptforum
Antworten: 7
Letzter Beitrag: 11-10-19, 20:04
-
By Robi in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 01-02-17, 11:46
-
By harkne in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 20-05-16, 14:34
-
By dschroeder in forum NEWSboard Programmierung
Antworten: 29
Letzter Beitrag: 19-05-16, 10:39
-
By danielfeurstein in forum IBM i Hauptforum
Antworten: 12
Letzter Beitrag: 09-08-02, 09:57
Tags for this Thread
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks