SQL 根据输入的不固定数量按人员自动分配整数倍,余数按排序依次分配给人员

本人自己写的函数,主要实现一张人员表,里面有A,B,C,D,E,F六个人,而我们提供一个总数量比如122,六个人先按每人20个分配,剩余2个数量根据先后顺序分配给A,B各一个。最后结果是A 21, B 21,C 20,D 20,E 20,F 20
-----插入测试表
create table ceshi (yh varchar(10),sl int)
insert into ceshi(yh,sl)
values ('A',0),
('B',0),
('C',0),
('D',0),
('E',0),
('F',0)

----开始建立函数
create  function [dbo].[wlzh_cfsl]
(@iquantity int)
returns @temp table(name varchar(20),qty int)
----实现自动拆分行函数
as 
begin
DECLARE @ceshi TABLE
( id int identity(1,1),
 name varchar(20),
 sl int)
 insert into @ceshi(name,sl)
 select yh,sl from ceshi      ----把需要进行计算的表数据插入变量表
 declare @count int,@zs int,@sy int,@i int
 set @i=1
 set @count=(select count(*) from @ceshi) ---6
 set @zs=@iquantity/@count  --20
 set @sy=@iquantity-@zs*@count --0
 update @ceshi set sl=@zs 
 while(@i<=@sy)
 begin 
 update @ceshi set sl=sl+1 where id=@i
 set @i=@i+1
 end

 insert into @temp(name,qty)
 select name,sl from @ceshi
 return
 end

 -----测试拆分效果
select * from wlzh_cfsl(122)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值