2017-12-26 20 views
1

クエリは、私は単一の列で、次の表を持って

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

私は、クエリに基づいて、次の依存

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

を構築したい SELECT SUM(z_num) FROM table WHERE z_num < i;

変数iはパラメータであり、1だけインクリメントする必要があります。 ORACLEでこのクエリを実装する方法は?

私はMYSQLでこれをやっていたならば、私は

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

のようなものを書くでしょう。しかし、残念ながら、それは、Oracle PL/SQLでは動作しません。

+2

どちらのデータベースでも、カーソルの順序を示す列が必要です。 –

答えて

0

を使用して、2つのサブクエリ:connect by

  • いずれかを各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 

ための合計を計算するには、2からNに番号i

  • 別dependendサブクエリを生成しますデモ:http://sqlfiddle.com/#!4/c460c/5

  • 0

    使用ROWNUM、

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

    OR

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

    はこれを試してみてください:

    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; 
    

    結果:

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

    をそれであってもよいです 助けます。

    関連する問題