2014-01-15 40 views
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 

我不能有這樣的原因我只是失去了一頂帽子。我如何將剩餘的商給一個記錄(我不在乎什麼記錄)?

+0

鴻溝(INT除法),然後將模數添加到最後/期望的星期(#hats%#weeks)。僅限SQL Server 2005+。 –

+0

[Here](http://stackoverflow.com/questions/20929751/divide-amount-equally-in-sql-server/20929917#20929917)是一個類似的問題。解決方案是在追蹤餘數的同時保持減去。 – HABO

+0

您使用的是哪個版本的SQL Server? –

回答

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總和(每1個排)的基礎上什麼也沒有得到週數分配