我的目标很简单,但我不知道我是否可以在一个SQL查询中检索我的数据。
我有一个包含4列的表,第一列包含一些支付金额,最后一个是分期付款的ID。我希望,对于给定的金额,我可以支付所有分期付款。
例如(使用下表)如果我有一个数量= 2800 我想得到3个第一行(500/2000/2000),因为我会为第一行支付500,2000对于第二个,300为第三个。
那么只能在一个查询中获得所需的行吗?我使用SQL Server。
已编辑:
让我们说我的金额 2800
问题,我将用这笔款项支付哪些分期付款?
回复:我会分三期支付身份证号码136/135和134.
感谢。
答案 0 :(得分:3)
您似乎想要累积总和。如果您使用的是SQL Server 2012+,那么这很简单:
select t.*
from (select t.*, sum(col1) over (order by installmenthiddenid desc) as cumesum
from table t
) t
where cumesum - col1 <= 2800;
我正在猜测列名以及如何定义排序。
在早期版本的SQL Server中,您可以使用apply
或相关子查询执行相同的操作。
编辑:
在SQL Server 2008中,您可以这样做:
select t.*
from table t cross apply
(select t2.*, sum(t2.col1) as cumesum
from table t2
where t2.installmenthiddenid >= t.installmenthiddenid
) t2
where t2.cumesum - t.col1 <= 2800;
答案 1 :(得分:1)
试试这个。使用Self join
查找运行总计。
;WITH cte
AS (SELECT Sum(b.amount) - 2800 AS amnt,
a.installpaidamount,
a.endinstallment,
a.installhiddenid
FROM Yourtable a
JOIN Yourtable b
ON b.endinstallment >= a.endinstallment
GROUP BY a.installpaidamount,
a.endinstallment,
a.installhiddenid),
cte2
AS (SELECT TOP 1 *
FROM cte
WHERE amnt > 0
ORDER BY amnt) SELECT *
FROM cte
WHERE amnt < 0
UNION ALL
SELECT *
FROM cte2