在搜索页面上工作。我的搜索结果正在运行,但我还需要提供过滤器选项。其中一个选择是一组具有产品数量的价格象限。因此,基本上在结果集中我必须获得最低价格和最高价格,然后将其分成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语句中执行此操作,因为如果用户要求,我们希望将其从搜索结果临时表中运行。
我一直在试图写这个砖墙,但似乎不会走得太远。
答案 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