sql server 如何对一个字段循环求和,当满足一个值就退出循环,并能得到那个值

weixin_41148832 2018-04-03 02:15:26
如何能让同一字段的第一行加上第二行,一直加到80或者最接近80的值就结束循环,并且此时需要得到他最后一次循环的值是多少
(不是sum的值,而是循环的值)
...全文
627 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zbdzjx 2018-04-03
  • 打赏
  • 举报
回复
借用2楼版主的数据,写个另一种方式:
with t(cnt1, cnt3) as
(
select 1,20 union all
select 2,40 union all
select 3,15 union all
select 4,5 union all
select 5,20
)
select top 1 * from (
  select cnt1, cnt3
  , (select SUM(cnt3) from t b where b.cnt1<=a.cnt1) cnt_sum 
  from t a
) aa
where cnt_sum<=80
order by cnt_sum desc
中国风 2018-04-03
  • 打赏
  • 举报
回复
ORDER BY cnt--指定递增的顺序,按你的业务去指定相应列
中国风 2018-04-03
  • 打赏
  • 举报
回复
e.g.
SELECT TOP 1 *
FROM
(SELECT *, SUM(cnt3) OVER (ORDER BY cnt) AS subcnt FROM tab1) AS t
WHERE t.subcnt<80
ORDER BY cnt DESC;
二月十六 2018-04-03
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([cnt1] int,[cnt3] int)
Insert #T
select 1,20 union all
select 2,40 union all
select 3,15 union all
select 4,5 union all
select 5,20
Go
--测试数据结束
;WITH cte AS (
Select *,cnt3 AS sumcnt from #T WHERE cnt1=1
UNION ALL
SELECT #T.*,sumcnt+#T.cnt3 FROM #T JOIN cte ON cte.cnt1+1 = #T.cnt1 WHERE sumcnt+#T.cnt3<=80
)
SELECT *
FROM #T
WHERE cnt1 = ( SELECT MAX(cnt1)
FROM cte
)


二月十六 2018-04-03
  • 打赏
  • 举报
回复
用cte递归实现,每次加一行数据,直到80为止

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧