SQL整数除法余数

4
这是我的情况:假设我有7顶帽子。
Month       Hats
1           7

在我的选择语句中,我需要将其除以3,且不能有部分值。 我想要有3条记录,分别具有以下的值:

Week     Hats
1        2
2        2
3        3

使用常规的四舍五入,我会得到

Week     Hats
1        2
2        2
3        2

我不能这样做,因为我刚刚丢了一顶帽子。如何将商的余数赋给一个记录(我不在乎是哪个记录)?


将数量除以周数(整数除法),然后将模数添加到最后/所需的周数(#hats%#weeks)。仅适用于SQL Server 2005+。 - Esoteric Screen Name
这是一个类似的问题。解决方案是在跟踪余数的同时不断减去。 - HABO
你使用的SQL Server版本是哪个? - Gordon Linoff
我认为这是SQL Server 10.5。 - SRQMarsh
2个回答

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 ,则可以将它们放在最后几周。

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。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接