在Oracle pl / sql中使用迭代进行查询

时间:2017-12-26 07:52:29

标签: oracle plsql

我的下表有一列

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中不起作用。

3 个答案:

答案 0 :(得分:0)

使用两个子查询:

  • 一个connect by来生成从2到N的数字i
  • 另一个dependend子查询,用于计算每个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

演示:http://sqlfiddle.com/#!4/c460c/5

答案 1 :(得分:0)

使用ROWNUM,

<?php

$mystring = "90001 90002";

$mystring = str_replace(" ","&nbsp;",$mystring);

echo $mystring;

?>

OR

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

答案 2 :(得分:0)

试试这个:

public void DeleteCell(ExcelWorksheet worksheet, string cellAddress)
    {
        if (worksheet.Cells[cellAddress].Merge == true)
        {
            var value = worksheet.Cells[cellAddress].Value;
            string range = GetMergedRange(worksheet, cellAddress); //get range of merged cells
            worksheet.Cells[range].Merge = false; //unmerge range
            worksheet.Cells[cellAddress].Clear(); //clear value
            //merge the cells you want again.
            //fill the value in cells again
        }
    }

结果:

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;

它可能对你有帮助。