2013-02-27 118 views
0

我創建了查詢來獲取最暢銷的產品。現在,我想的SerialNo前100的產品,以便通過SellingQty ...等來查詢這個結果,例如百強產品訂單..如何查詢查詢結果?

這裏是我的查詢這給所有的產品訂單總共訂購人:

SELECT tblProducts.skuCode,tblProducts.productCode, tblProducts.productName, COUNT(tblOrders_Products.delivered) as totalOrder 
    FROM tblOrders_Products INNER JOIN tblProducts ON tblOrders_Products.productID = tblProducts.productID 
    WHERE tblProducts.productName is not null 
    GROUP BY tblOrders_Products.delivered, tblOrders_Products.productID, tblProducts.skuCode,  tblProducts.productName,tblProducts.productCode 
    ORDER BY totalOrder 

我認爲要創建一個視圖。但是很多帖子都說,使用Order By子句查看is harmful或者某個時候沒有給出結果,所以我想知道如何做到這一點?

我可以通過排序DataTable在.NET中做到這一點,並將其用作DataSource。但是如何在SQL SERVER中完成呢?

哪種方式更快?在SQL Server中訂購還是在DataTable? 我正在使用SQL SERVER 2005.

謝謝。

+0

在你選擇的staement中添加'TOP'子句,例如'SELECT TOP 100 SELECT tblProducts.skuCode,tblProducts.productCode,tblProducts.productName,.....' – 2013-02-27 03:20:58

+0

按總訂單分組將允許你檢查TOP(X)或TOP(X)百分比FROM您的查詢 – 2013-02-27 03:26:30

+0

您想通過SerialNo訂購還是訂購通過SellingQty在您的Order By totalOrder之後?或者你只是想能夠切換Order By參數? – 2013-02-27 03:29:08

回答

1

這應該給你由SerialNo訂購的前100名產品(我認爲它是tblProducts的一部分)。

您可以切換Order By參數以使其排序其他字段。

SELECT a.skuCode, a.productCode, a.productName, a.totalOrder, a.SerialNo 
FROM 
(
SELECT TOP 100 tblProducts.skuCode,tblProducts.productCode, tblProducts.productName, COUNT(tblOrders_Products.delivered) as totalOrder, tblProducts.SerialNo 
    FROM tblOrders_Products INNER JOIN tblProducts ON tblOrders_Products.productID = tblProducts.productID 
    WHERE tblProducts.productName is not null 
    GROUP BY tblOrders_Products.delivered, tblOrders_Products.productID, tblProducts.skuCode,  tblProducts.productName,tblProducts.productCode 
    ORDER BY totalOrder) a 
ORDER BY a.SerialNo 
1

像這樣的東西應該這樣做:

WITH TopProducts AS 
(
    SELECT TOP 100 tblProducts.productID, COUNT(tblOrders_Products.delivered) as totalOrder 
    FROM tblOrders_Products INNER JOIN tblProducts ON tblOrders_Products.productID = tblProducts.productID 
    WHERE tblProducts.productName is not null 
    GROUP BY tblProducts.productID 
    ORDER BY COUNT(tblOrders_Products.delivered) DESC 
) 
SELECT * 
FROM TopProducts INNER JOIN tblProducts ON TopProducts.productID = tblProducts.productID 
ORDER BY tblProducts.SerialNo 

的新產品推薦被稱爲SQL Server中的公共表表達式,它的重用查詢零部件一種巧妙的方法。

在.NET中對DataTable進行排序也會有用。您可能不會注意到僅有100行的性能差異。在用戶可能想要以不同方式對結果進行排序的情況下,在客戶端排序實際上是可取的。通過單擊網格中的列標題,因爲這可以在沒有單獨的數據庫調用的情況下完成。

+0

欣賞你的答案,並向我介紹新概念。我試過,但得到「AS」附近的查詢錯誤。我檢查了一些引用,並試圖將列名放在AS旁邊,但仍然出現相同的錯誤。 – 2013-02-27 05:51:02