Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用以前的值计算字段_Sql_Oracle_Oracle11g - Fatal编程技术网

Sql 使用以前的值计算字段

Sql 使用以前的值计算字段,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我面临一个问题,涉及到计算字段的值,但使用前一行的值。表中包含数据的速率 ID Original Rate Capital -- ------------------ ------- 1 50 1 2 50 + 1 1 3 50 + 1 + 1 1 4 50 + 1 + 1 + 2 2 5 50 + 1 + 1 + 2 + 2 2 公式

我面临一个问题,涉及到计算字段的值,但使用前一行的值。表中包含数据的速率

ID Original Rate      Capital
-- ------------------ -------
 1 50                       1
 2 50 + 1                   1
 3 50 + 1 + 1               1
 4 50 + 1 + 1 + 2           2
 5 50 + 1 + 1 + 2 + 2       2
公式为:原始利率(n)=原始利率(n-1)+资本

在original中,我有1行原始利率为50,我希望下一个值应该是原始利率+资本

我也尝试过使用,但它似乎不适用于计算字段

如果你们对这个案子有任何想法,请帮帮我

谢谢你抽出时间


新案例的更新:

+----+---------------+------+---------+-------+-------+-------+
| ID | Original Rate | Type | Capital | Rate1 | Rate2 | Rate3 |
+----+---------------+------+---------+-------+-------+-------+ 
|  1 |            50 |    1 |       2 | 0.1   |       |       | 
|  2 |            50 |    1 |       2 | 0.1   |       |       |
|  3 |            50 |    1 |       2 | 0.1   |       |       |
|  4 |            50 |    2 |       1 |       | 0.2   |       |
|  5 |            50 |    3 |       5 |       |       | 0.3   |
+----+---------------+------+---------+-------+-------+-------+

New Rate (n) = New Rate (n-1) + Original Rate * IF(Type=1,Rate1*capital,IF(Type=2,Rate2*capital),Rate3*capital)  
我期望的输出在最后一列中,如下所示:

+----+---------------+------+---------+-------+-------+-------+-----+
| ID | Original Rate | Type | Capital | Rate1 | Rate2 | Rate3 |     |
+----+---------------+------+---------+-------+-------+-------+-----+
|  1 |            50 |    1 |       2 | 0.1   |       |       |  10 |
|  2 |            50 |    1 |       2 | 0.1   |       |       |  20 |
|  3 |            50 |    1 |       2 | 0.1   |       |       |  30 |
|  4 |            50 |    2 |       4 |       | 0.2   |       |  70 |
|  5 |            50 |    3 |       5 |       |       | 0.3   | 145 |
+----+---------------+------+---------+-------+-------+-------+-----+
欢迎任何意见和建议

[2017年4月17日更新] 我使用
递归和

WITH RATE_MASTER AS (ID, RATE)
(
    SELECT 1, ORIGINALRATE FROM RATE WHERE ID = 1
    
    UNION ALL
    
    SELECT ID,
    CASE 
        WHEN TYPE = 1 THEN RATE + Rate1*Capital 
        WHEN TYPE = 2 THEN RATE + Rate2*Capital
        WHEN TYPE = 3 THEN RATE + Rate3*Capital
    END AS RATE
    
    FROM RATE, RATE_MASTER
    WHERE RATE_MASTER.ID = RATE.ID - 1
)
SELECT * FROM RATE_MASTER;
它工作正常


[关闭]Oracle安装程序

CREATE TABLE rate ( id, capital ) AS
  SELECT 1, 1 FROM DUAL UNION ALL
  SELECT 2, 1 FROM DUAL UNION ALL
  SELECT 3, 1 FROM DUAL UNION ALL
  SELECT 4, 2 FROM DUAL UNION ALL
  SELECT 5, 2 FROM DUAL;
SELECT id,
       50 + SUM( capital ) OVER ( ORDER BY id )
          - FIRST_VALUE( capital ) OVER ( ORDER BY id ) AS rate,
       capital
FROM   rate;
ID RATE CAPITAL
-- ---- -------
 1   50       1
 2   51       1
 3   52       1
 4   54       2
 5   56       2
查询

CREATE TABLE rate ( id, capital ) AS
  SELECT 1, 1 FROM DUAL UNION ALL
  SELECT 2, 1 FROM DUAL UNION ALL
  SELECT 3, 1 FROM DUAL UNION ALL
  SELECT 4, 2 FROM DUAL UNION ALL
  SELECT 5, 2 FROM DUAL;
SELECT id,
       50 + SUM( capital ) OVER ( ORDER BY id )
          - FIRST_VALUE( capital ) OVER ( ORDER BY id ) AS rate,
       capital
FROM   rate;
ID RATE CAPITAL
-- ---- -------
 1   50       1
 2   51       1
 3   52       1
 4   54       2
 5   56       2
输出

CREATE TABLE rate ( id, capital ) AS
  SELECT 1, 1 FROM DUAL UNION ALL
  SELECT 2, 1 FROM DUAL UNION ALL
  SELECT 3, 1 FROM DUAL UNION ALL
  SELECT 4, 2 FROM DUAL UNION ALL
  SELECT 5, 2 FROM DUAL;
SELECT id,
       50 + SUM( capital ) OVER ( ORDER BY id )
          - FIRST_VALUE( capital ) OVER ( ORDER BY id ) AS rate,
       capital
FROM   rate;
ID RATE CAPITAL
-- ---- -------
 1   50       1
 2   51       1
 3   52       1
 4   54       2
 5   56       2

请将一些示例数据和预期结果以表格格式作为格式化文本发布。请单击“运行代码段”按钮?我还用数据更新了一个表。谢谢MT0,它可以处理示例数据。我要申请我的案子,很快就回来!