此問題與問題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
我該如何做到這一點?非常感謝。
此問題與問題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
我該如何做到這一點?非常感謝。
爲什麼這不是正確的結果?
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行表...
感謝您的及時迴應。在上面的示例中,每個組中最少的項目數是5.因此,如果一個組少於5個項目,則應將其分配給其他組。我不確定對性能有什麼影響,但我預計每個進程少於100K行 – Eric 2012-03-20 01:18:23
這需要如何動態?您是否只有組1和組2,或者是否會有一些可以隨數據集擴展的組? – lyrisey 2012-03-20 00:12:12
實際上創建的組的數量將取決於約束。在上面的示例中,我使用了5.我們的最終用戶可以輸入任何數字範圍。 – Eric 2012-03-20 00:24:17
我的第一個想法是使用APPLY與UDF,但優雅的基於行集的解決方案可能不可行。使用多語句UDF或proc可能更容易。 – wtjones 2012-03-20 01:27:29