如何使用SQL Oracle实现递归?

问题描述 投票:0回答:1

我有一个包含以下列的表格:

ID, date, amount, amount2

amount2
仅在第一行中有值。 我需要使用该列前一行以及
amount2
 列的值递归计算 
amount

列的每一行
  • amount2
     的第二行应该是: 
    amount2
     的第一行值 - 
    amount
     的第二行值
    
  • amount2
  • 的第三行应该是:
    amount2
    的第二行值 -
    amount
    的第三行值 ...
    
    
  • 我尝试使用以下代码,但它不起作用:

SELECT first_column, CASE WHEN second_column IS NULL THEN LAG(first_column, 1, first_column) OVER (ORDER BY row_id) - LAG(first_column, 1, first_column) OVER (ORDER BY row_id DESC) ELSE second_column END AS calculated_second_column from table;

可重现的示例:
创建表 your_table_name (
id INT,

日期 日期,
金额 DECIMAL(10,2),
金额1 DECIMAL(10,2)
);

插入your_table_name(id,日期,金额,金额1)

价值观

(234, '2020-01-01', 4, 10),
(234,'2020-01-02',7,空),
(234,'2020-01-03',10,空),
(234,'2020-01-04',15,空),
(234, '2020-01-05', 6, 空);

我希望在 amount1 栏中有; 10, 10-7=3, 3-10=-7, -7-15=-22, -22-6=-28

sql oracle recursion
1个回答
0
投票
对于样本数据:

CREATE TABLE table_name (id, amount, amount2) AS SELECT 1, 100, 200 FROM DUAL UNION ALL SELECT 2, 10, NULL FROM DUAL UNION ALL SELECT 3, 20, NULL FROM DUAL UNION ALL SELECT 4, 30, NULL FROM DUAL;

输出:

身份证1234
金额 金额2
100 200
10 190
20 170
30 140
小提琴

© www.soinside.com 2019 - 2024. All rights reserved.