返回搜索结果的过滤器象限

时间:2013-12-11 00:05:07

标签: sql-server tsql

在搜索页面上工作。我的搜索结果正在运行,但我还需要提供过滤器选项。其中一个选择是一组具有产品数量的价格象限。因此,基本上在结果​​集中我必须获得最低价格和最高价格,然后将其分成4组,然后返回每个产品计数的分组。

因此我们退回了49种产品,最低价产品为10美元,最高价产品为110美元。我必须针对我们过滤的每组搜索结果重新计算这一数据,以便我无法对最低和最高限额进行硬编码。

所以它看起来像这样,括号中的数字是返回产品的数量,其值落在该象限内。

$10.00 to $35.00  (2)
$35.01 to $60.00 (12)
$60.01 to $85.00 (0)
$85.01 to $110.00  (35)

我试图在单个SELECT语句中执行此操作,因为如果用户要求,我们希望将其从搜索结果临时表中运行。

我一直在试图写这个砖墙,但似乎不会走得太远。

1 个答案:

答案 0 :(得分:0)

我无法让它在一个声明中发挥作用,但我能够让它发挥作用。我们创建了一个名为[Numbers]的Numbers表,我正在使用...

DECLARE @priceFloor money; DECLARE @priceCeiling money; DECLARE @priceRange int;  
SELECT @PriceFloor = FLOOR(MIN(price)) , @PriceCeiling = CEILING(Max(price)),
    @PriceRange = CEILING(Max(price))/4 
FROM #TempSearchResults;  

WITH priceFilterCTE AS
(          
    SELECT Number * @PriceRange AS FromPrice, (Number * @PriceRange) + @PriceRange -.01 AS ToPrice          
    FROM Numbers 
    WHERE Number BETWEEN 0 AND 3 
)  

SELECT CAST(FromPrice AS VARCHAR(20)) + ' to ' + CAST(ToPrice AS VARCHAR(20)) AS Price,  
    (
       SELECT COUNT(1) 
       FROM #TempSearchResults 
       WHERE price BETWEEN  priceFilterCTE.FromPrice AND priceFilterCTE.ToPrice
    ) AS [COUNT]  
FROM priceFilterCTE  

返回看起来像......

PRICE             COUNT
0 to 798.99       949
799 to 1597.99    162
1598 to 2396.99   32
2397 to 3195.99   7