sqlserver疑难按最大值分组请教

yiminglian 2022-08-04 16:54:27

如图需要跟据规则和最大值来分组,即相同规则分后数量相加不能超过前面定义的最大值

 

...全文
220 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
炎同学要努力 2023-06-08
  • 打赏
  • 举报
回复

img

炎同学要努力 2023-06-08
  • 打赏
  • 举报
回复

;with t as(
select 20 [最大] ,18 [规则],20 [分后数量] union all
select 20 [最大] ,13 [规则],15 [分后数量] union all
select 20 [最大] ,13 [规则],3 [分后数量] union all
select 35 [最大] ,15 [规则],28 [分后数量] union all
select 35 [最大] ,15 [规则],28 [分后数量] union all
select 30 [最大] ,19 [规则],4 [分后数量] union all
select 30 [最大] ,19 [规则],3 [分后数量] union all
select 30 [最大] ,19 [规则],18 [分后数量] union all
select 30 [最大] ,19 [规则],2 [分后数量] union all
select 30 [最大] ,19 [规则],4 [分后数量] union all
select 30 [最大] ,19 [规则],3 [分后数量]

)
--select 规则, 最大 ,分后数量
--from t
--order by 规则

select 规则, 最大
,[sum分后数量] = sum(分后数量)
from t
group by 规则,最大
HAVING sum(分后数量)<=最大
order by 规则

img

shinger126 2022-08-06
  • 打赏
  • 举报
回复

简单的sql无法直接处理,得用循环

yiminglian 2022-08-08
  • 举报
回复
@shinger126 嗯目前看来好像除了递归没法用其他方式
猫狸嘎 2022-08-04
  • 打赏
  • 举报
回复

为什么规则19的分后数量不是30 30 30 1 1 1这样,分满后积分分配在下一行?

yiminglian 2022-08-05
  • 举报
回复
@猫狸嘎 这个数量就是原数量我标题有歧义,数量不定
猫狸嘎 2022-08-05
  • 举报
回复
@yiminglian 那能不能按照30,30,1 来?如果不能,我还是不清楚你的分配细则,因为看起来你分配是无序的
yiminglian 2022-08-06
  • 举报
回复
@猫狸嘎 确实是无序的,规则就是同规则当前行向下累计如果加上下一行的数量超过前面的最大则用该行的数量向下重新累计.比如规则19 中的4 3 18 2 加起来是 27再加下一行是8 大于30了所以 4 3 18 2 是一组, 下一组就从8开始累计 8+9+4 =21 再加18 会大于30 所以 8 9 4 是一组 18又重新累计
5条回复

34,591

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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