0

大規模なレコードセットのドリルダウン機能を備えた Web サイトで作業しています。

次のレコードセットがあるとします。

tblBrand (ID, Name, PriceFrom, PriceTo, BHPFrom, BHPTo)

1, Audi, 170000, 340000, 100, 250
2, BMW,  250000, 290000, 110, 400
3, Ford, 275000, 500000,  75, 150
4, Kia,  110000, 250000,  50, 100
5, VW,   135000, 460000,  50, 200

ユーザーには、デフォルトですべてのレコードを表示します。ドリル ダウン機能では、次のような URL をユーザーに提示しています。

Price:
0-100000 (0 brands)
100000-200000 (3 brands)
200000-300000 (5 brands)
300000-> (3 brands)

BHP:
0-100 (3 brands)
100-200 (5 brands)
200-> (3 brands)

ここまでは順調ですね。ここで範囲ごとのカウントの問題の解決策を得ました:範囲に向かって範囲をグループ化する

しかし、ユーザーがドリルダウン リンクの 1 つをクリックすると問題が発生します。彼が「BHP 0-100」をクリックしたとしましょう。すると表示されるのは tblBrand ID 3,4,5 だけになります。これはもちろん、単純な WHERE 句を使用すると簡単です。しかし、ここに私の質問があります:

ユーザーが「BHP 0-100」を選択して最初のドリルダウンを行った後、価格帯ごとのブランド数と BHP 範囲ごとのブランド数の更新された数をユーザーに提示するにはどうすればよいですか?

現在、私の解決策(これは機能します)は、ドリルダウン後に結果のレコードセットを一時テーブルに挿入し、そのテーブルですべての新しいカウントを行うことです。これは簡単な方法ですが、10 万件以上のレコードと +/- 20 種類のドリルダウンの可能性があり、それぞれが 5 ~ 20 の範囲を持つため、非常に重い作業になります。

更新:これは私がやっていることです(疑似コード):

SELECT INTO #DrillDownRecordset (ID, Name)
FROM tblBrand
WHERE BHPFrom > @SelBHPFrom AND BHPTo < @SelBHPTo

SELECT COUNT (ID)
FROM #DrillDownRecordset
GROUP BY PriceRanges

SELECT COUNT (ID)
FROM #DrillDownRecordset
GROUP BY BHPRanges

これは機能しますが、非常に重いです..

ROLLUPの使用を検討できますか?

4

0 に答える 0