这是我的情况:说我有7顶帽子。
Month Hats
1 7
在我的选择陈述中,我需要将其除以3,我不能有部分帽子。我希望有3条记录,其中包含以下值:
Week Hats
1 2
2 2
3 3
通过正常的舍入,我会结束
Week Hats
1 2
2 2
3 2
我不能有这个原因我只是丢了一顶帽子。如何将商的余数提供给一条记录(我不关心什么记录)?
答案 0 :(得分:1)
有趣的问题。您可以使用仅限SQL执行此操作。我们的想法是将帽子的数量分配为整数。然后,每周添加一个额外的帽子,直到达到所需的总数。
以下是针对您提议的数据完成此操作的查询:
with weeks as (
select 1 as w union all select 2 union all select 3
),
const as (
select 7 as numhats,
(select count(*) from weeks) as numweeks
)
select w,
((numhats / numweeks) +
(case when row_number() over (order by w) <= numhats % numweeks
then 1
else 0
end)
) as hats
from weeks cross join
const;
请注意,这会在头几周而不是最后几周增加额外的帽子。您可以使用order by w desc
代替order by w
将其置于最后几周。
答案 1 :(得分:0)
要解决此问题,您需要一些其他信息。跟踪原始总数,并找到分配的总和
Week HatNum HatColor OrigTotal SumWeekHats RowID
1 2 Blue 7 6 1
2 2 Blue 7 6 2
3 2 Blue 7 6 3
1 2 Red 7 6 1
2 2 Red 7 6 2
3 2 Red 7 6 3
然后根据尚未分配的内容更新hatNum(每组1行)