Abfrageergebnis zweier Zeile in eine Zeile...

schalke

Benutzer
Beiträge
14
Hallo,
der Titel ist etwas blöd gewählt, ich habe aber keinen besseren Ausdruck gefunden...

Ich habe eine Liste von Datensätzen (Aufträge), die später auf bestimmte Bedingungen gefiltert weden sollen:

|Nr | EM | Ort | Ziel | Zeit 1 | Zeit 2 |
| 001 | V1 | Auftr1 | Z_Auftr1 | 17:00 | 17:30 |
| 007 | V1 | Auftr2 | Z_Auftr2 | 17:32 | 18:30 |
| 010 | V1 | Auftr3 | Z_Auftr3 | 18:46 | 19:15 |
| 012 | V1 | Auftr4 | Z_Auftr4 | 19:16 | 19:25 |

Nun möchte ich das Ausgabergebnis so, dass die Aufträge und die Folgeaufträge in einer Zeile dargestellt werden:

|Nr | EM | Ort | Ziel | Zeit 1 | Zeit 2 |FNr | FEM | FOrt | FZiel | FZeit 1 | FZeit 2 |
| 001 | V1 | Auftr1 | Z_Auftr1 | 17:00 | 17:30 | 007 | V1 | Auftr2 | Z_Auftr2 | 17:32 | 18:30 |
| 007 | V1 | Auftr2 | Z_Auftr2 | 17:32 | 18:30 | 010 | V1 | Auftr3 | Z_Auftr3 | 18:46 | 19:15 |
| 010 | V1 | Auftr3 | Z_Auftr3 | 18:46 | 19:15 | 012 | V1 | Auftr4 | Z_Auftr4 | 19:16 | 19:25 |
| 012 | V1 | Auftr4 | Z_Auftr4 | 19:16 | 19:25 | usw...

Die Datensätze liegen in der zeitlich korrekten Reihenfolge vor, es soll also eigentlich "nur" immer die nachfolgende Zeile als Folgeinsatz in darüberliegen Zeile dargetellt werden. Bezüge haben die Datensätze bis auf EM und ggf. die Folgezeit keine.
Ich steh' da voll auf dem Schlauch. Wer hat einen Tipp?

Danke Michael
 
Werbung:
Die gute Nachricht zuerst: das geht mit einer im SQL standardisierten Lösung, und zwar lead(), was zu den Windowfunktionen gehört. Mal für die ersten 3 Spalten:

Code:
test=*# select * from schalke ;
nr | em |  ort  |  ziel  | zeit1 | zeit2
----+----+--------+----------+-------+-------
  1 | v1 | auftr1 | z_auftr1 | 17:00 | 17:30
  7 | v1 | auftr2 | z_auftr2 | 17:32 | 18:30
10 | v1 | auftr3 | z_auftr3 | 18:46 | 19:15
12 | v1 | auftr4 | z_auftr4 | 19:16 | 19:25
(4 Zeilen)

test=*# select nr, em, ort, ziel, zeit1, zeit2, lead(nr) over(order by nr) as fnr, lead(em) over(order by nr) as fem, lead(ort) over(order by nr) as fort from schalke ;
nr | em |  ort  |  ziel  | zeit1 | zeit2 | fnr | fem |  fort 
----+----+--------+----------+-------+-------+-----+-----+--------
  1 | v1 | auftr1 | z_auftr1 | 17:00 | 17:30 |  7 | v1  | auftr2
  7 | v1 | auftr2 | z_auftr2 | 17:32 | 18:30 |  10 | v1  | auftr3
10 | v1 | auftr3 | z_auftr3 | 18:46 | 19:15 |  12 | v1  | auftr4
12 | v1 | auftr4 | z_auftr4 | 19:16 | 19:25 |  |  |
(4 Zeilen)

test=*#

Die schlechte Nachricht: das können faktisch alle Datenbanken - außer MySQL und deren Ableger.
 
Schade, drum hab' ich da wohl auch keine Lösung gefunden. Dann hast Du mir quasi geholfen, es hilft mir aber nix ;-)
Dann werde ich das wohl mit PHP lösen... Die Krux ist, dass mein Chef dieses bescheuerte Ergebnis will, aber eben "auf die Schnelle" und dann wahrscheinlich nie mehr wieder braucht.

Trotzdem danke
Michael
 
Kann ich leider nicht, da MySQL bei der Software halt eingesetzt wird...

Gruss
Michael

PS: Kann es sein, dass Du schon zu Usenet-Zeiten in den DB-Brettern aktiv warst? Ich meine, mich dumpf an Dich (und Deine Präferenz für PostgreSQL) zu erinnern.
 
Werbung:
Zurück
Oben