SQL Integer Division剩余

时间:2014-01-15 16:02:22

标签: sql sql-server

这是我的情况:说我有7顶帽子。

Month       Hats
1           7

在我的选择陈述中,我需要将其除以3,我不能有部分帽子。我希望有3条记录,其中包含以下值:

Week     Hats
1        2
2        2
3        3

通过正常的舍入,我会结束

Week     Hats
1        2
2        2
3        2

我不能有这个原因我只是丢了一顶帽子。如何将商的余数提供给一条记录(我不关心什么记录)?

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行)