在记录集中向下钻取时按组计算记录

时间:2013-09-04 20:08:33

标签: sql sql-server count group-by

我正在开发一个网站,该网站具有大型记录集的向下钻取功能。

假设我有以下记录集:

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

对于用户,我将默认显示所有记录。在我的向下钻取功能中,我将向用户显示以下内容:

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)

到目前为止一切顺利。我在这里得到了逐个计数问题的解决方案:Group a range towards a range

但是,当用户点击我的其中一个下钻链接时,会出现问题。让我们说他点击“必和必拓0-100”。然后它将只显示tblBrand ID 3,4,5。使用简单的WHERE子句,这当然很容易。但这是我的问题:

在用户通过选择“BHP 0-100”完成第一次下钻后,如何向用户显示每个价格范围的品牌和每个BHP范围的品牌的更新数量?

目前我的解决方案(可行)是在钻取到temp-table之后将结果记录集插入并在该表上进行所有新计数。这是一种简单的方法,但是有100k +记录和+/- 20种类型的钻取可能性,每种都有5-20个范围,这将成为一项非常繁重的任务!

更新:这就是我正在做的事情( pseudecode ):

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吗?

0 个答案:

没有答案