Sql r2.running_值应该是选择列表中的@moneys-r2.running_值。而且,当所有的钱都用完时,查询应该停止。但我喜欢。我喜欢外部应用方法。我会试试看是否可以用它代替CTE。我所做的任务的全部目的是为了更好地练习cte,但在我的日常生活中添加
Sql r2.running_值应该是选择列表中的@moneys-r2.running_值。而且,当所有的钱都用完时,查询应该停止。但我喜欢。我喜欢外部应用方法。我会试试看是否可以用它代替CTE。我所做的任务的全部目的是为了更好地练习cte,但在我的日常生活中添加,sql,sql-server-2008,common-table-expression,Sql,Sql Server 2008,Common Table Expression,r2.running_值应该是选择列表中的@moneys-r2.running_值。而且,当所有的钱都用完时,查询应该停止。但我喜欢。我喜欢外部应用方法。我会试试看是否可以用它代替CTE。我所做的任务的全部目的是为了更好地练习cte,但在我的日常生活中添加任何有用的方法都是有价值的@道格拉斯。在SQL Server中,使用变量不是一种典型的方法。您永远不会将值传入或形成过程?@DougCoats。我当然喜欢。我误读了你的密码。我认为@money正在设置中。我认为WHERE子句中的比较运算符应该小
r2.running_值
应该是选择列表中的@moneys-r2.running_值
。而且,当所有的钱都用完时,查询应该停止。但我喜欢。我喜欢外部应用方法。我会试试看是否可以用它代替CTE。我所做的任务的全部目的是为了更好地练习cte,但在我的日常生活中添加任何有用的方法都是有价值的@道格拉斯。在SQL Server中,使用变量不是一种典型的方法。您永远不会将值传入或形成过程?@DougCoats。我当然喜欢。我误读了你的密码。我认为@money
正在设置中。我认为WHERE
子句中的比较运算符应该小于(不等于),因为在第一行中,他希望看到变量的值,我认为在选择列表中应该是@moneys-r2.running\u value
,而不是r2.running\u value
。而且,当所有的钱都用完时,查询应该停止。但我喜欢。我喜欢外部应用方法。我会试试看是否可以用它代替CTE。我所做的任务的全部目的是为了更好地练习cte,但在我的日常生活中添加任何有用的方法都是有价值的@道格拉斯。在SQL Server中,使用变量不是一种典型的方法。您永远不会将值传入或形成过程?@DougCoats。我当然喜欢。我误读了你的密码。我还以为钱已经准备好了呢。
DECLARE @monies AS money = 35600.00;
WITH RFRoll AS
(
SELECT
col
, value
, Amt = @monies
FROM #rfTmp
UNION ALL
SELECT
col
, value
, CASE
WHEN @monies>value then @monies-value
WHEN value<@monies then @monies-value
WHEN value>@monies then @monies-@monies
END Amt
FROM #rfTmp
WHERE
CASE
WHEN @monies>value then @monies-value
WHEN value<@monies then @monies-value
WHEN value>@monies then @monies-@monies
END >0
)
SELECT *
FROM RFRoll
select r.*, r2.running_value
from #rftmp r outer apply
(select sum(r2.value) as running_value
from #rftmp r2
where r2.col <= r.col
) t2;
declare @monies as money = 35600.00;
WITH RFRoll as
(
SELECT
#rfTmp.*
, CASE
WHEN @monies>=value then value
WHEN value<@monies then value
WHEN value>@monies then @monies
END AS Amt
, CASE
WHEN @monies>=value then value
WHEN value<@monies then value
WHEN value>@monies then @monies
END AS ValueUsed
FROM #rfTmp WHERE [No] = 1
UNION ALL
SELECT
v.*
, RFRoll.Amt + CASE
WHEN v.value>@monies-RFRoll.Amt then @monies-RFRoll.Amt
WHEN v.value<@monies-RFRoll.Amt then v.value
WHEN @monies-RFRoll.Amt>v.value then v.value
END
, CASE
WHEN v.value>@monies-RFRoll.Amt then @monies-RFRoll.Amt
WHEN v.value<@monies-RFRoll.Amt then v.value
WHEN @monies-RFRoll.Amt>v.value then v.value
END
FROM #rfTmp v INNER JOIN RFRoll ON v.[No] = RFRoll.[No] + 1
WHERE RFRoll.Amt<@monies
)
SELECT * FROM RFRoll