2012-03-20 12 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を使用することですが、エレガントな行セットベースの解決策は実現できません。複数ステートメントの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 

「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

関連する問題