PDA

View Full Version : SQL-Abfrage



Seiten : [1] 2

horst
09-09-04, 11:15
Hallo Zusammen.

Ich habe eine LF über 4 PF.Die sind nach Kundenummer,Anlagedatum desc und Anlagezeit desc sortiert.Wenn ich in Rpg die Datei lese, erreiche ich, dass immer der neueste Satz (Datum/Zeit) zuerst angezeigt wird. (z.B. Datei -B-, Datei -D-, Datei -A- ...).

Ist es möglich dieses über SQL zu erreichen ??????

Vielen Dank im Voraus

Horst

BenderD
09-09-04, 11:35
Hallo Horst,

klare Frage => klare Antwort: ja

mfg

Dieter Bender


Hallo Zusammen.

Ich habe eine LF über 4 PF.Die sind nach Kundenummer,Anlagedatum desc und Anlagezeit desc sortiert.Wenn ich in Rpg die Datei lese, erreiche ich, dass immer der neueste Satz (Datum/Zeit) zuerst angezeigt wird. (z.B. Datei -B-, Datei -D-, Datei -A- ...).

Ist es möglich dieses über SQL zu erreichen ??????

Vielen Dank im Voraus

Horst

PS: Bei der Definition des Cursors muss freilich eine ORDER BY Klausel angegeben werden, sonst überlässt Du die Reihenfolge gemäß SQL Standard dem Datenbank System.

horst
09-09-04, 11:49
Hallo Dieter,

vielen Dank für die schnelle Antwort.

Noch eine klare Frage - Wie wäre es mit einem kleinen Beispiel ??

Gruss

Horst

kuempi von stein
09-09-04, 12:16
nun bin ich ja mal auf die antwort gespannt....

:D

BenderD
09-09-04, 12:22
Hallo Horst,

wie wär's mit:
select ... from Datei A
union
select ... from Datei B
union ...

order by datum desc

Dieter Bender


Hallo Dieter,

vielen Dank für die schnelle Antwort.

Noch eine klare Frage - Wie wäre es mit einem kleinen Beispiel ??

Gruss

Horst

horst
09-09-04, 12:30
Hallo Dieter,

klappt prima. Nur Order by wird nicht angenommen.

Gruss

Horst

BenderD
09-09-04, 13:46
Hallo Horst,

könntest Du Dich vielleicht etwas präziser ausdrücken? Was machst Du mit welchem Release und welche Fehlermeldung bekommst Du? Bei mir wird unter V5R1 order by nicht nur "angenommen" sondern auch ausgeführt, wenn ich das am interaktiven prompt eintippe und ich sehe da keinen Grund, dass das im embedded SQL anders wäre.

mfg

Dieter Bender


Hallo Dieter,

klappt prima. Nur Order by wird nicht angenommen.

Gruss

Horst

horst
09-09-04, 14:30
Hallo Dieter,

mein SQL (V5R1) sieht so aus

SELECT EKDNR, EANDATE, EANTIME FROM emfaxhp WHERE ekdnr =
1124002 UNION ALL SELECT DIKDNR, DIEANDATE, DIEEANTIME FROM divobjp
WHERE dikdnr = 1124002 .

Wähle ich Order by im 1. Select aus, erhalte ich folgende Fehlermeldung :

Nachrichten-ID . . . . : SQL6308 Bewertung . . . . . . : 00
Nachrichtenart . . . . : Information
Sendedatum . . . . . . : 09.09.04 Sendezeit . . . . . . : 15:25:45

Nachricht . . . : Nicht mit UNION zulässig.
Ursache . . . . : Die Anweisung SELECT soll über UNION mit einer anderen
Anweisung verbunden werden. Gleichzeitig wurde jedoch auch mindestens eine
der folgenden Angaben gemacht:
-- Eine Klausel ORDER BY (Daten, die auf die Schlüsselwörter ORDER BY
folgen)
-- Eine Klausel FOR UPDATE OF (Daten, die auf die Schlüsselwörter FOR
UPDATE OF folgen)
-- Die Angabe, daß zusätzliche Optionen angegeben werden sollen.
Wenn die Anweisung SELECT über UNION mit einer anderen Anweisung verbunden
werden soll, dürfen weder die Klausel ORDER BY noch die Klausel FOR UPDATE
OF, noch zusätzliche Optionen angegeben werden.

Ich kann im Select auch nicht alle Felder auswählen

Gruss

Horst

horst
09-09-04, 14:43
Nachtrag,

dieses SQL funktioniert.

SELECT DISTINCT EKDNR, EANDATE, EANTIME, EUSER, ENPATH, ENEMPF FROM
emfaxhp WHERE ekdnr = 1124002 UNION ALL SELECT DIKDNR, DIEANDATE,
DIEEANTIME, DIUSER, DIDESC, DIOBJ FROM divobjp WHERE dikdnr =
1124002 ORDER BY 2 desc
SELECT-Anweisung vollständig verarbeitet.

BenderD
09-09-04, 16:09
Hallo Horst,

nichts anderes hatte ich Dir empfohlen.
Order By ist eine Funktionalität der Ergebnismenge, es kann also nur als letztes ein einziges Mal verbrutzelt werden. Order By auf Subselects, wie von Dir zuerst probiert, machen überdies logisch keinen Sinn, Du willst ja gerade durchgängig sortiert haben.

mfg

Dieter Bender


Nachtrag,

dieses SQL funktioniert.

SELECT DISTINCT EKDNR, EANDATE, EANTIME, EUSER, ENPATH, ENEMPF FROM
emfaxhp WHERE ekdnr = 1124002 UNION ALL SELECT DIKDNR, DIEANDATE,
DIEEANTIME, DIUSER, DIDESC, DIOBJ FROM divobjp WHERE dikdnr =
1124002 ORDER BY 2 desc
SELECT-Anweisung vollständig verarbeitet.