我需要为用户分配订单数。 假设有3个订单和5个用户。
users orders
us1 1
us2 1
us3 1
us4 0
us5 0
11个订单和5个用户
users orders
us1 2
us2 2
us3 2
us4 2
us5 3
DECLARE @countInterval int = 13
--DECLARE @sum int = 5
DECLARE @countUser int = 5
Update DistributionBasesUsers
SET @countUser=@countUser-1, @countInterval=@countInterval-2, DistributionBaseCountOrder=
CASE
WHEN @countUser>0 THEN FLOOR(@countInterval/@countUser) ELSE 0
--WHEN FLOOR(@countInterval/@countUser)<0 THEN @countInterval%5
--WHEN FLOOR(@countInterval/@countUser)=0 THEN 0
END
答案 0 :(得分:2)
我得到的东西与您要的东西相似。对于您的第二个示例,我给出的结果与您给出的结果不同,并且我不确定update
的含义:
declare @t table (users char(3))
insert into @t(users) values
('us1'),
('us2'),
('us3'),
('us4'),
('us5')
declare @orderCount int
set @orderCount = 13
;With CountedNumbered as (
select
*,
COUNT(*) OVER () as Cnt,
ROW_NUMBER() OVER (ORDER BY users) as Rn
from
@t
)
select
users,
(@orderCount / Cnt) +
CASE WHEN @orderCount % Cnt >= Rn THEN 1 ELSE 0 END as orders
from
CountedNumbered
结果:
users orders
----- -----------
us1 3
us2 3
us3 3
us4 2
us5 2
如果我们向orders int
添加可为空的@t
列,则可以将最终查询更改为:
update CountedNumbered
set orders =
(@orderCount / Cnt) +
CASE WHEN @orderCount % Cnt >= Rn THEN 1 ELSE 0 END
如果这是您的update
的意图。 (如果您以前没有看到过通过CTEs进行更新的消息,那么可能会令人讨厌)