2012-03-20 70 views
0

此問題與問題here有關。我有一個表,看起來像這樣:按SQL中的計數進行分區

Item Count 
1  1 
2  4 
3  8 
4  2 
5  6 
6  3 

我需要是組項目,例如,低於5成新的組和總各組至少應爲5結果應該像這樣:

Item Group Count 
1  1  1 
2  1  4 
3  2  8 
4  3  2 
5  4  6 
6  3  3 

我該如何做到這一點?非常感謝。

+0

這需要如何動態?您是否只有組1和組2,或者是否會有一些可以隨數據集擴展的組? – lyrisey 2012-03-20 00:12:12

+0

實際上創建的組的數量將取決於約束。在上面的示例中,我使用了5.我們的最終用戶可以輸入任何數字範圍。 – Eric 2012-03-20 00:24:17

+0

我的第一個想法是使用APPLY與UDF,但優雅的基於行集的解決方案可能不可行。使用多語句UDF或proc可能更容易。 – wtjones 2012-03-20 01:27:29

回答

2

爲什麼這不是正確的結果?

Item Group Count 
1  1  1 
2  2  4 
3  3  8 
4  4  2 
5  5  6 
6  1  3 

或者這個?

Item Group Count 
1  1  1 
2  2  4 
3  3  8 
4  4  2 
5  5  6 
6  6  3 

在我看來,你正在試圖解決的答案「如何分組的項目,以減少羣體的數量,最大限度地提高每個組中的項目數,W/O超過限制5」 。這聽起來很像Knapsack problem。也許你應該閱讀Celko's SQL Stumper: The Class Scheduling Problem和提出的解決方案。其他人也遇到了這個問題,例如。 And now for a completely inappropriate use of SQL Server。單挑:這不是一個微不足道的問題。任何天真的算法將死於一個緩慢的死亡試圖解決它在一個1M行表...

+0

感謝您的及時迴應。在上面的示例中,每個組中最少的項目數是5.因此,如果一個組少於5個項目,則應將其分配給其他組。我不確定對性能有什麼影響,但我預計每個進程少於100K行 – Eric 2012-03-20 01:18:23