-
Hallo,
zuerst einmal, wenn man mit Sub-Selects arbeitet, sollten man Sub-Selects in der Select-Anweisung wenn möglich vermeiden und lieber in der From-Anweisung einsetzen.
In Deinem Fall wird die gleiche Abfrage 3x ausgeführt, um den Minimal-Wert, den Maximal-Wert und die Anzahl zu bestimmen. Besser wäre natürlich die Tabelle nur einmalig zu lesen und dabei den Minimal- und Maximal-Wert, sowie die Anzahl ermitteln.
Weiterhin, muss Du in solchen Fällen die Gesamt-Abfrage zumindest geistig in Einzel-Abfragen zerlegen und anschließend wieder zu einem Großen Ganzen zusammen fassen.
Soweit ich das überblickt habe werden die folgenden Abfrage benötigt:
- Tabelle MYC4REP, aus der nur die Sätze mit C4RCTX = '100' und C4D0NB = 676 selectiert werden.
- Die Tabelle MYC5REP muss für alle Sätze mit C4RCTX = '100' und C5D0NB = 676 (beides Schlüssel-Felder) auf C5rctx, c5d0nb, c5lfdn verdichtet werden. Auf dieser Ebene wird dann der Minimal-Wert und Maximal-Wert, sowie die Anzahl ermittelt.
- Das Ergebnis aus Abfrage 1 muss mit Tabelle MYC5REP über C5RCTX, C5D0NB, C5LFDN verknüpft werden, da nur MYC5REP über alle Schlüssel-Felder mit Tabelle 3 verknüpft werden kann. Die Verknüpfung der 3 Abfragen muss dann wieder auf RCTX, D0NB und LFDN verdichtet werden und nur die Sätze mit J in INF01 gezählt werden.
- Die einzelnen Teilergebnisse werden dann miteinander über RCTX, D0NB und LFDN verknüpft und die gewünschten Spalten ausgewählt und wie gewünscht sortiert.
Die Abfrage könnte im Endeffekt etwa so aussehen:
PHP-Code:
With a as (Select *
from MyC4Rep
Where C4RCTX = '100' AND C4D0NB = 676)
b as (Select C5rctx, c5d0nb, c5lfdn,
Min(C5W4NB) as Min_cw5nb,
Max(C5w4nb) as Max_CW5NB,
Count(*) as Anz_In_Tabelle2
from MYC5Rep
Where C5RCTX = '100' and C5D0NB = 676)
Group by c5rctx, c5d0nb, c5fldn),
c as (Select I5RCTX, I5D0NB, C5LFDN as I5LFDN,
count(I5NF01) Anz3
from a join MyC5REP on C4RCTX = C5RCTX
and C4D0NB = C5D0NB
and C4LFDN = C5LFDN
join Tab3 on C5RCTX = I5RCTX
and C5D0NB = I5RCTX
and C5CRNB = I5CRNB
and C5W3NB = I5W3NB
and C5W4NB = I5W4NB
and C5XXTX = I5XXTX
Where I5NF01 = 'J')
SELECT a.*, Min_Cw5nb, Max_Cw5NB, Anz_in_Tabelle2, Anz3
FROM a join b on c4rctx = c5rctx and c4d0nb = c5d0nb and c4lfdn = c5lfdn
join c on C4rctx = i5rctx and c4d0nb = i5d0nb and c4lfdn = i5lfdn
Birgitta
Similar Threads
-
By Bratmaxxe in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 24-01-07, 19:17
-
By cbe in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 24-08-06, 17:30
-
By Stefan_Sk in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 26-05-06, 16:37
-
By Lucky4712 in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 24-05-06, 15:57
-
By itec01 in forum IBM i Hauptforum
Antworten: 9
Letzter Beitrag: 16-09-04, 18:38
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