【问题标题】:Subquery in access: how to get previous row calculated value访问中的子查询:如何获取上一行计算值
【发布时间】:2021-12-27 11:25:45
【问题描述】:

我有一个查询结果表,在 X 中添加了计算字段以获得净值。 简化它,它看起来像这样:

period_start | period_end | gross | X | net |
|:----------:|:----------:|:-----:|:-:| ---:|
| 31.12.2007 | 31.12.2008 | 3000  |30 |2970 |
| 31.12.2008 | 30.11.2020 | 3000  |50 |2950 |
| 30.11.2020 | 30.07.2054 | 3000  |150|2850 |

如何使用 ms-access 查询修改它以将 period_start 与 period_end 连接起来,以显示上个月的净额? 我之前尝试过使用子查询来获取上一个期间的值,但从未在计算过程中进行过。最好的结果是:

period_start | period_end | gross | X | net |
|:----------:|:----------:|:-----:|:-:| ---:|
| 31.12.2007 | 31.12.2008 | 3000  |30 |2970 |
| 31.12.2008 | 30.11.2020 | 2970  |50 |2920 |
| 30.11.2020 | 30.07.2054 | 2920  |150|2770 |

【问题讨论】:

  • 类似于select *,(select gross from table1 as t1 where t1.period_end=t.period_start) as PREV_VAL from table 1 as t

标签: sql ms-access


【解决方案1】:

在另一个查询中使用查询结果。考虑:

SELECT Data.*, 
gross - Nz((SELECT Sum(x) AS SX FROM Data AS Dupe WHERE Dupe.Period_end<Data.Period_end ),0) AS AdjGross, 
gross - (SELECT Sum(x) AS SX FROM Data AS Dupe WHERE Dupe.Period_end<=Data.Period_end) AS AdjNet
FROM Data;

可能的替代方法是根据您的查询构建报告并使用文本框 RunningSum 属性。

【讨论】:

  • 谢谢@June7,你的回答给了我一些不同的结果(向后),所以我在 AdjGross 中切换了 : Gross - Nz((SELECT Sum(x) AS SX FROM Data AS Dupe WHERE Dupe.Period_end>Data.Period_end ),0) AS AdjGross, AdjGross - x as AdjNet ,现在它完全按照我想要的方式工作。我现在想知道,如果 X 是基于 AdjGross 的计算值而不是静态值怎么办?有点像循环引用,第一个 X 值基于总,但下一个基于 AdjGross。在访问中还能解决吗?
  • 好吧,我无法理解。根据您最初的叙述,我认为 X 是一个计算字段。
猜你喜欢
  • 1970-01-01
  • 2015-10-22
  • 1970-01-01
  • 2018-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-27
  • 1970-01-01
相关资源
最近更新 更多