【发布时间】:2020-09-18 16:12:11
【问题描述】:
免责声明:SQL Server 编程中的新功能
我目前正在用 SQL 进行一个我无法计算的计算。
基本上,这是一个有期初余额的计算,一些计算取决于期初余额和期末余额。表格的最终结果应该如下:
| Employee | ROWN |Balance_year1 | O_balance | calc | C_balance |
--------------------------------------------------------------------
| Emp1 | 1 | 1000 | 1000 | 20 | 1020 |
| Emp1 | 2 | 1000 | 1020 | 20.4 | 1040.4 |
| Emp1 | 3 | 1000 | 1040.4 | 20.808 | 1061.208 |
| Emp2 | 1 | 2000 | 2000 | 40 | 2040 |
| Emp2 | 2 | 2000 | 2040 | 40,8 | 2080,8 |
| Emp2 | 3 | 2000 | 2080,8 | 41,616 | 2122,416 |
到目前为止,我写的代码如下:
WITH table1 AS (
SELECT
*
, [O_balance] = LAG([C_balance], 1, [Balance_year1]) OVER (PARTITION BY [Employee] ORDER BY [ROWN] ASC)
FROM dataset
),
table2 AS (
SELECT
*
, [calc] = --Some calculations that depends on the [C_balance] from the row before
FROM table1
)
SELECT
*
, [O_balance]
, [calc]
, [C_balance] = [O_balance] + [calc]
FROM table2
我对桌子的问题是:
-
[C_balance]在第一个CTE使用时没有计算,所以不能运行。 (无效的列名[C_balance]) -
[C_balance]在[calc]中使用时计算不正确。
我想您可以逐行计算表格,也可以将 [C_balance] 保存在一个变量中,然后在整个运行过程中对其进行更新,但是 idk?
我希望你们中的一个可以帮助我 - 斗争是真实的 :-) 谢谢!
【问题讨论】:
-
[C_balance]中是否有列dataset? -
不,我在*之后所做的所有列都是用于计算的添加列
-
那么你对
LAG([C_balance], 1, [Balance_year1])有什么期望? -
你有其他选择吗?我尝试了很多不同的东西,但我认为这个失败的例子是最好的,可以让你了解这个问题:-) 我可以告诉你,有些语言你可以看一个排成 peek-function i Qlik
标签: sql sql-server common-table-expression calculation cumulative-sum