Hirdetés

Új hozzászólás Aktív témák

  • Apollo17hu

    őstag

    válasz Apollo17hu #5214 üzenetére

    Többé-kevésbé sikerült összeraknom. Álljon itt az utókornak:

    WITH t AS
     (SELECT t.id
            ,t.ertek
            ,row_number() over(ORDER BY t.id) AS seqnum
      FROM   (SELECT 'A' AS "ID",-2 AS "ERTEK" FROM dual
              UNION ALL
              SELECT 'B',-5 FROM dual
              UNION ALL
              SELECT 'C',-1 FROM dual
              UNION ALL
              SELECT 'D', 3 FROM dual
              UNION ALL
              SELECT 'E',10 FROM dual
              UNION ALL
              SELECT 'F',-7 FROM dual
              UNION ALL
              SELECT 'G',-4 FROM dual
              UNION ALL
              SELECT 'H',20 FROM dual
              UNION ALL
              SELECT 'I',-1 FROM dual
              UNION ALL
              SELECT 'J',-3 FROM dual) t),
    cte(id,ertek,runningsum,seqnum) AS
     (SELECT ID
            ,ertek
            ,(CASE
               WHEN ertek > 0 THEN
                0
               ELSE
                ertek
             END) AS runningsum
            ,seqnum
      FROM   t
      WHERE  t.seqnum = 1
      UNION ALL
      SELECT cte.id
            ,t.ertek
            ,(CASE
               WHEN t.ertek + cte.runningsum > 0 THEN
                0
               ELSE
                t.ertek + cte.runningsum
             END) AS runningsum
            ,t.seqnum
      FROM   cte
      JOIN   t
      ON     t.seqnum = cte.seqnum + 1
             /*AND t.id = cte.id*/)
    SELECT cte.ertek, cte.runningsum AS korr_ertek
    FROM   cte
    ORDER  BY seqnum

Új hozzászólás Aktív témák