Abfrage in Schleife

IchHH

Datenbank-Guru
Beiträge
284
Hallo ich habe heute ein Frage zum Thema Schleifen,

ich habe eine Tabelle in der zum Beispiel drinnen steht:

WERKYEARKWMATNRMenge
10012023100000110
1002202310000010
1001202311000011
1001202312000010
1001202313000010
1001202314000010

ich möchte nun dass wenn eine Menge 0 vorhanden ist, die erste YEARKW angezeigt wird in einer zusätzlichen Spalte die den Wert 0 beinhaltelt. Also bei Zeil 6 zum Beispiel müsste stehen 202312, ebenso bei Zeile 5. Wichtig ist dabei das die Schleife MATNR und Werk unterscheidet.

Ich wollte das erst mit LAG lösen nur das liest ja immer nur den Wert der vorherigen Spalte aus. Und LAG mit Unterabfrage LAG geht leider nicht wieder Window in Windowausführung nicht.

Wie aber setze ich das um damit ich zu meine Ergebnis komme?
 
Werbung:
Keine Ahnung ob das noch schneller geht (vielleicht mit Rekursion?) aber mein Instinkt sagt mir immer erstmal Join > Rekursion > Schleife.
Code:
WITH t(WERK,YEARKW,MATNR,Menge) AS (
    SELECT 1001,202310,00001,10 UNION ALL
    SELECT 1002,202310,00001,0 UNION ALL
    SELECT 1001,202311,00001,1 UNION ALL
    SELECT 1001,202312,00001,0 UNION ALL
    SELECT 1001,202313,00001,0 UNION ALL
    SELECT 1001,202314,00001,0
    )
SELECT    t1.WERK,
        t1.YEARKW,
        t1.MATNR,
        t1.Menge,
        min(t2.YEARKW)
FROM    t t1
LEFT JOIN t t2
ON        t1.MATNR = t2.MATNR
AND        t1.Menge = 0
AND        t2.Menge = 0
AND        t1.YEARKW > t2.YEARKW
AND NOT EXISTS (    SELECT    1/0
                    FROM    t t3
                    WHERE    t3.MATNR = t1.MATNR
                    AND        t3.Menge != 0
                    AND        t3.YEARKW > t2.YEARKW )
GROUP BY t1.WERK,t1.YEARKW,t1.MATNR,t1.Menge
ORDER BY t1.MATNR,t1.YEARKW
 
Zurück
Oben