Sql server 使用来自2列的值
我试图弄清楚如何进行一种“消费”查询,从另一个INT列(Y)减去一个INT值列(X),直到它达到0,然后停止。DesiredResult列和DesiredResultExplainion列仅用于参考正在执行的数学运算。这在描述日期顺序中发生(从未来到现在) 我最初的方法是使用窗口功能,但问题是一旦值(Y)达到0,它就需要停止执行运行总数。使用CTE也有类似问题 如果更改表结构会有所帮助,那么可以这样做 版本:SQL Server 2014或更高版本 谢谢Sql server 使用来自2列的值,sql-server,Sql Server,我试图弄清楚如何进行一种“消费”查询,从另一个INT列(Y)减去一个INT值列(X),直到它达到0,然后停止。DesiredResult列和DesiredResultExplainion列仅用于参考正在执行的数学运算。这在描述日期顺序中发生(从未来到现在) 我最初的方法是使用窗口功能,但问题是一旦值(Y)达到0,它就需要停止执行运行总数。使用CTE也有类似问题 如果更改表结构会有所帮助,那么可以这样做 版本:SQL Server 2014或更高版本 谢谢 DECLARE @test TABLE
DECLARE @test TABLE
(
ID INT IDENTITY (1,1)
,PeriodDate DATE
,X INT
,Y INT
,DesiredResult INT
,DesiredResultExplanation VARCHAR(100)
)
INSERT INTO @test VALUES ('2017-05-01', 100,0, 100,'Nothing left to subtract. Value is unchanged')
INSERT INTO @test VALUES ('2017-05-08', 200,0, 200,'Nothing left to subtract. Value is unchanged')
INSERT INTO @test VALUES ('2017-05-15', 300,0, 100,'300 - 200 = 100 (Orig -1100 has been consumed)')
INSERT INTO @test VALUES ('2017-05-22', 400,0,-200,'400 - 600 = -200 ')
INSERT INTO @test VALUES ('2017-05-29', 500,-1100,-600, '500 - 1100 = -600')
SELECT *
FROM @test
ORDER BY PeriodDate DESC
WITH cte as (
SELECT *,
SUM(X) OVER (ORDER BY PeriodDate DESC) accumulated
FROM @test
), parameter as (
SELECT 1100 as startY
)
SELECT *,
CASE WHEN accumulated <= startY
THEN accumulated - startY
WHEN LAG(accumulated) OVER (ORDER BY PeriodDate DESC) < startY
THEN accumulated - startY
ELSE X
END as newDesire
FROM cte
CROSS JOIN parameter
ORDER BY PeriodDate DESC;
不确定什么是
没有留下任何要减法的内容
,然后你突然减法了。因为在您的示例中,columnY
没有改变,请按描述顺序查看PeriodDate列。1100在5/29时消耗,并向后移动。当它达到5/8和5/1时,1100就被消耗掉了。希望这是合理的1100从哪里来?哦,是向后的?它是一个静态值(从预测中减去一个顺序)。在这个例子中,我只记下了1100。我忘记了使用滞后!这是我需要的基础工作。谢谢你,胡安!如果你看到编辑中的键是使用comulativeSUM
,我选择删除LAG
,并且认为它很容易阅读
WHEN accumulated - X < startY