此问题与问题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