2012-03-20 3 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

+0

실제로 생성 된 그룹 수는 제한 조건에 따라 달라집니다. 위의 샘플에서 5를 사용합니다. 최종 사용자는 임의의 숫자 범위를 입력 할 수 있습니다. – Eric

+0

첫 번째 생각은 UDF와 함께 APPLY를 사용하는 것입니다. 그러나 우아한 행 집합 기반 솔루션은 실현 가능하지 않을 수 있습니다. 다중 명령문 (multi-statement) UDF 또는 프로 시저를 사용하는 것이 더 쉬울 수도 있습니다. – wtjones

답변

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 

당신이 대답을 해결하기 위해 노력하고 나에게 보인다 '방법 그룹 그룹의 수를 최소화하고/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 개 미만의 항목이 있으면 다른 그룹에 배포해야합니다. 나는 성능에 어떤 영향을 미치는지 모르겠지만 프로세스 당 100,000 개 미만의 행을 기대하고있다. – Eric