【问题标题】:Recursive function in SQL [duplicate]SQL中的递归函数[重复]
【发布时间】:2023-03-24 13:50:02
【问题描述】:

我的表中有如下数据,

+----+-----+
|身份证 |数量 |
+----+-----+
| 1 | 100 |
| 2 | 200 |
| 3 | 150 |
| 4 | 50 |
+----+-----+

我需要如下结果,

+----+-----+-----+
|身份证 |数量 | C.数量 |
+----+-----+--------+
| 1 | 100 | 100 |
| 2 | 200 | 300 |
| 3 | 150 | 450 |
| 4 | 50 | 500 |
+----+-----+-------+

第三列的结果将是前几行的总和, 请任何人帮助....

【问题讨论】:

  • 我不明白...500 来自哪里?
  • @PaulDraper 450+50=500..
  • 已经回答here
  • 哦……他指的是以前的,而不是列。我会改正的。

标签: sql function recursion


【解决方案1】:

我只会使用子查询:

SELECT ID, Qty,
   (SELECT SUM(Qty) FROM [My Table] b WHERE b.ID <= [My Table].ID) AS [Total Qty]
FROM [My Table]

【讨论】:

    【解决方案2】:

    请尝试:

    SELECT S1.ID, S1.Qty ,sum(S2.Qty) CUM_SUM
    FROM YourTable S1 join YourTable S2
    on S1.ID>=S2.ID
    group by S1.ID, S1.Qty
    ORDER BY S1.ID
    

    【讨论】:

      【解决方案3】:
       SELECT ID, Qty,
       SUM(Qty) OVER(ORDER BY ID 
       ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) 
            AS C.QTY
       FROM Table
      

      【讨论】:

      • 看起来很有趣。这是用于什么数据库服务器?
      • @David Sql Server 2012(之前不支持)。不确定oracle何时开始支持它。工作在至少 11 克。如果它对 postgresql 有效,也不会感到惊讶。绝对不会在 MySQL 中工作
      【解决方案4】:

      试试这个:

      select a.id,a.qty,sum(b.qty) as total_qty
      from table a cross join table b
      where b.id <= a.id
      group by a.id,a.qty 
      order by a.id
      

      demo

      【讨论】:

        猜你喜欢
        • 2022-01-03
        • 2021-10-19
        • 2013-06-20
        • 1970-01-01
        • 1970-01-01
        • 2012-10-19
        • 1970-01-01
        • 2010-10-07
        • 1970-01-01
        相关资源
        最近更新 更多