zugehörige Paare zusammen führen

Starkstroemer

Benutzer
Beiträge
5
Hallo,

ich bin neu im Forum und suche verzweifelt Hilfe bei folgendem Problem:

Ich möchte die Zeilen, welche gleichfarbig markeirt sind als 1 Zeile zusammen führen. Das Ergebnis sollte also so aussehen, das ich für eine Box, welche eine 3 (Start) als Kommando hat das Ende suche (Kommando -3). Danach soll die Zeile so aufgebaut sein:

Start,Ende,Box,Programmnr

Ich weiß nicht, wie ich zu einer 3 immer die passende -3 suchen soll. Das wäre ja dann immer ein abgeschlossener Datensatz.

Vielen Dank schon mal für Eure Hilfe!
 

Anhänge

  • Tabelle.jpg
    Tabelle.jpg
    94,4 KB · Aufrufe: 3
Werbung:
Eventuell so:
Code:
WITH t AS (
SELECT   ROW_NUMBER() OVER (ORDER BY Box,Datum) AS zeile,
     Datum,
     Box,
     Kommando,
     Programmnr
FROM   tabelle
WHERE   Kommando IN ( -3,3)
     )
SELECT   t1.Datum AS Start,
     t2.Datum AS Ende,
     t1.Box,
     t1.Programmnr
FROM   t t1
LEFT JOIN t t2
ON     t1.zeile + 1 = t2.zeile
WHERE   t1.Kommando = 3
 
Hallo,

ich habe noch ein Anliegen.

Aufgrund der obigen Abfrage würde ich jetzt gerne noch heraus bekommen, welche Einträge für die letzte Zeit X keine "-3" haben, also noch kein Ende.
 
Die müssten eigentlich in deiner Ausgabe schon enthalten sein und bei t2.Datum AS Ende einen NULL-Wert stehen haben (zumindest wenn du LEFT JOIN übernommen hast). Du kannst also deine WHERE-Bedingung erweitern mit AND t2.Datum IS NULL und müsstest ausschließlich Datensätze ohne Enddatum haben.
 
Hallo Ukulele,

wieder einmal vielen Dank für Deine Hilfe. So ganz bin ich mit der Where Bedingung noch nicht am Ziel. Das was heraus kommt ist zwar richtig, aber nicht vollzählig. Bei allen rot markierten Einträgen folkt auf ein Kommando 3 (Start) keine -3(Ende). Also müssten diese auch im Ergebnis mit auftauchen.
 

Anhänge

  • Tabelle 2.jpg
    Tabelle 2.jpg
    75,2 KB · Aufrufe: 4
Code:
WITH t AS (
SELECT ROW_NUMBER() OVER (PARTITION BY Box ORDER BY Datum) AS zeile,
Datum,
Box,
Kommando,
Programmnr
FROM tabelle
WHERE Kommando IN ( -3,3)
)
SELECT t1.Datum AS Start,
t2.Datum AS Ende,
t1.Box,
t1.Programmnr
FROM t t1
LEFT JOIN t t2
ON t1.Box = t2.Box
AND t1.zeile + 1 = t2.zeile
WHERE t1.Kommando = 3
AND t2.Datum IS NULL
Ansonsten musst du mal posten was aus dem Select innerhalb des WITH raus kommt (und bitte als Text posten).
 
Hallo ukulele,

ich möchte mich gerne wiederholen...Vielen, vielen Dank für Deine Hilfe. Bin echt gerührt wie selbstlos Du anderen hier im Forum weiter hilfst. Klappt bestens.

Danke!Danke!
 
Werbung:
Zurück
Oben