【发布时间】:2021-01-11 01:50:48
【问题描述】:
第一个查询没有运行,因为我在 LAG() 中有一个 SUM(),这是非法的,但我将其包含在内只是为了概念化这个想法。
SELECT
GUID_Key
,AFE_Number
,UWI
,Date
,ACT_NET_AMOUNT
,Cum_Act
,FC_NET_AMOUNT
,Cum_FC
,ROWNUM
,IIF(Cum_FC > Cum_Act, FC_NET_AMOUNT, Cum_Act-ISNULL(LAG(SUM(Cum_Act)OVER(PARTITION BY Date))OVER (ORDER BY ROWNUM),0)) AS Result
FROM ready_set
或者
SELECT
GUID_Key
,AFE_Number
,UWI
,Date
,ACT_NET_AMOUNT
,Cum_Act
,FC_NET_AMOUNT
,Cum_FC
,ROWNUM
,IIF(Cum_FC > Cum_Act, FC_NET_AMOUNT, IIF((LAG(CumRes) OVER( ORDER BY ROWNUM)) IS NULL, Cum_Act, Cum_Act - LAG(CumRes) OVER( ORDER BY ROWNUM))) AS Result
,IIF((LAG(CumRes) OVER( ORDER BY ROWNUM)) IS NULL ,/*Result*/IIF(Cum_FC > Cum_Act, FC_NET_AMOUNT, IIF((LAG(CumRes) OVER( ORDER BY ROWNUM)) IS NULL, Cum_Act, Cum_Act - LAG(CumRes) OVER( ORDER BY ROWNUM))), /*Result*/(IIF(Cum_FC > Cum_Act, FC_NET_AMOUNT, IIF((LAG(CumRes) OVER( ORDER BY ROWNUM)) IS NULL, Cum_Act, Cum_Act - LAG(CumRes) OVER( ORDER BY ROWNUM))) + Lag(CumRes) OVER ( ORDER BY ROWNUM))) AS CumRes
FROM ready_set
现在我应该提到在“ready_set”中有两个空列,result 和 CumRes,这就是第二个查询甚至运行的原因。
这是 Excel 电子表格中显示的确切想法。原则上它并不是非常复杂,但我猜它是在编程中! Excel Formula of the same idea
编辑:Excel results of the formula
同时,我试图在 CumRes 下保持结果的运行总计,并根据之前的累积计算结果。它们是相互依赖的,所以我不能简单地将结果相加来得到 CumRes 列。我并不完全了解 SQL 如何生成行,如果我试图滞后于正在制作而不是预先存在的列,我可能会采用完全错误的方法。你看到我的问题或思维错误了吗?
【问题讨论】:
-
请提供示例数据、期望的结果以及您要实现的逻辑的清晰说明。
-
要嵌套窗口聚合,您必须嵌套选择,即派生表或公用表表达式。
-
@GordonLinoff。抱歉,我无法向您提供该实际数据,因为它是机密的。您希望样本数据如何?以什么格式?底部的链接显示了公式,我添加了一个带有这些公式结果的附加图像。
-
@dnoeth 如果可以像您说的那样嵌套它们,您能否解释一下或指出我可以了解更多信息的方向?
-
我假设您的结果可以通过简单的方式实现。您能否详细说明基于
FC_NET_AMOUNT和ACT_NET_AMOUNT的逻辑? (cum_act和cum_fc似乎是这些列的累积和加上 ROW_NUMBER)
标签: sql sql-server recursion