這是我的情況:假設我有7個帽子。SQL整數部分餘數
Month Hats
1 7
在我的選擇聲明中,我需要除以3,我不能有部分帽子。我想有3條記錄與以下值:
Week Hats
1 2
2 2
3 3
與正常的四捨五入我最終會
Week Hats
1 2
2 2
3 2
我不能有這樣的原因我只是失去了一頂帽子。我如何將剩餘的商給一個記錄(我不在乎什麼記錄)?
這是我的情況:假設我有7個帽子。SQL整數部分餘數
Month Hats
1 7
在我的選擇聲明中,我需要除以3,我不能有部分帽子。我想有3條記錄與以下值:
Week Hats
1 2
2 2
3 3
與正常的四捨五入我最終會
Week Hats
1 2
2 2
3 2
我不能有這樣的原因我只是失去了一頂帽子。我如何將剩餘的商給一個記錄(我不在乎什麼記錄)?
有趣的問題。您可以使用僅限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
來將它們放在最後幾周。
要解決此問題,您需要您需要一些附加信息。跟蹤原始總,並找出哪些被分配
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個排)的基礎上什麼也沒有得到週數分配
鴻溝(INT除法),然後將模數添加到最後/期望的星期(#hats%#weeks)。僅限SQL Server 2005+。 –
[Here](http://stackoverflow.com/questions/20929751/divide-amount-equally-in-sql-server/20929917#20929917)是一個類似的問題。解決方案是在追蹤餘數的同時保持減去。 – HABO
您使用的是哪個版本的SQL Server? –