2013-02-27 96 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