2009-01-27 49 views
3

我正在使用VBScript(ASP Classic)和SQL Server;我試圖在網站上有一個部分,您可以在特定價格級別看到產品數量。就像:如何創建「按價格篩選」類型的查詢?

$50 - $100 (4) 
$100 - $500 (198) 
$500 - $1000 (43) 

對於我的愛我無法弄清楚這樣的查詢的好方法。我的意思是......我知道如何在一定的價格範圍內獲得產品的數量,但我無法弄清楚如何在幾個不同的價格範圍內做到這一點,而無需編寫一堆嵌套查詢來彙總所有結果特別是因爲相關產品的價格差別很大。

在做這樣的事情時,您是否有一個「經驗法則」來確定如何計算出不同的價格範圍?

回答

1

在SQL(我相信)這樣做的最有效的方法是使用sum case結構:

select sum(case when Price >= 50 and Price < 100 then 1 else 0 end) as 50to100, 
     sum(case when Price >= 100 and Price < 500 then 1 else 0 end) as 100to500, 
     sum(case when Price >= 500 and Price < 1000 then 1 else 0 end) as 500to1000 
from Products 

這將只需要該表的單次掃描。

0

你可以使用聯合查詢

SELECT '100 - 200', COUNT(*) FROM Products 
WHERE Price >= 100 AND Price <= 200 
UNION 
SELECT '300 - 400', COUNT(*) FROM Products 
WHERE Price >= 300 AND Price <= 400 
0

創建一個函數(UDF),其涉及與價值

$50 - $100 = 1 
$100 - $500 = 2 
$500 - $1000 = 3 

等價格範圍

然後通過功能做一個選擇分組在值列上。

0

我可能會使用一個SQL函數,它根據值爲每個記錄分配一個類別代碼,然後用類別代碼進行分組並計數。

1

表驅動它:

SELECT pr.MinPrice, pr.MaxPrice, COUNT(*) 
FROM Products AS p 
INNER JOIN PriceRanges AS pr 
    ON p.UnitPrice BETWEEN pr.MinPrice AND pr.MaxPrice 
GROUP BY pr.MinPrice, pr.MaxPrice 
ORDER BY pr.MinPrice, pr.MaxPrice 

如果您需要爲不同的產品類別不同的​​價格範圍:

SELECT pr.ProductCategory, pr.MinPrice, pr.MaxPrice, COUNT(*) 
FROM Products AS p 
INNER JOIN PriceRanges AS pr 
    ON p.ProductCategory = pr.ProductCategory 
    AND p.UnitPrice BETWEEN pr.MinPrice AND pr.MaxPrice 
GROUP BY pr.ProductCategory, pr.MinPrice, pr.MaxPrice 
ORDER BY pr.ProductCategory, pr.MinPrice, pr.MaxPrice 

你將不得不增加一些清理和處理範圍的結束。