2017-12-26 6 views
1

ich die folgende Tabelle mit einer einzigen SpalteAbfrage mit Iteration in Oracle PL/SQL

Z_NUM 
-------- 
34545 
345 
656 
32 
42 
... 

Ich möchte eine folgende Abhängigkeit

i | SUM(Z_NUM) 
---------------- 
2 | 40934 
3 | 51244 
4 | 54793 
... 

basierend auf Abfrage erstellen SELECT SUM(z_num) FROM table WHERE z_num < i;

Die Variable i ist ein Parameter und sollte um 1 inkrementiert werden. Wie implementiert man diese Abfrage in ORACLE?

Wenn ich in MYSQL dies zu tun, würde ich so etwas wie

SELECT 
    ​@n := @n + 1 n, 
    SUM(z_num) 
FROM table, (SELECT @n := 1) m 
WHERE z_num < n; 

Aber leider funktioniert es nicht in Oracle PL/SQL schreiben.

+2

In beiden Datenbanken benötigen Sie eine Spalte, die die Reihenfolge für den Cursor bereitstellt. –

Antwort

0

Verwenden zwei Unterabfragen:

  • ein mit connect by Zahlen erzeugen i von 2 bis N
  • weitere abhängige Unterabfrage eine Summe für jeden i

SELECT i, 
     ( SELECT coalesce(sum(z_num), 0) 
      FROM table1 WHERE z_num < i 
     ) as myresult 
FROM (
    SELECT level+1 As i FROM dual 
    CONNECT BY LEVEL <= (SELECT max(Z_NUM) FROM table1)-1 
) 
ORDER BY i 

zu berechnen Demo: http://sqlfiddle.com/#!4/c460c/5

0

Verwendung ROWNUM,

SELECT SUM(z_num) 
    FROM (SELECT z_num, rownum rown 
      FROM table) 
WHERE z_num < rown; 

ODER

SELECT SUM(z_num) 
    FROM (SELECT z_num, rownum rown 
      FROM table) 
WHERE rown < 10; 
0

Try this:

SELECT i, 
    ( SELECT coalesce(sum(z_num), 0) 
     FROM Table_NUM WHERE ROWNUM <= i 
    ) as SUM(Z_NUM) 
FROM (
     SELECT level+1 As i FROM dual 
     CONNECT BY LEVEL <= (SELECT Max(ROWNUM) FROM Table_NUM)-1 
    ) 
ORDER BY i; 

Ergebnis:

I  SUM_RESULT 
----------------- 
2  34890 
3  35546 
4  35578 
5  35620 

kann es sein, dir helfen.