如何查询查询结果?

时间:2013-02-27 03:18:50

标签: asp.net sql-server

我创建了查询以获取畅销产品。现在,我想查询此结果,例如按SerialNo排序的前100个产品 SellingQty排名前100的产品 ......等..

这是我的查询,它通过totalOrders命令所有产品订购:

    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进行排序并将其用作DataSource来在.NET中执行此操作。但是如何在SQL SERVER中完成它?

哪种方式更快?在SQL Server或DataTable中订购? 我正在使用SQL SERVER 2005。

感谢。

2 个答案:

答案 0 :(得分: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 :(得分: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 

TopProducts在SQL Server中称为公用表表达式,它是重用查询部分的简洁方法。

在.NET中对DataTable进行排序也很有意思。您可能不会发现只有100行的性能差异。在用户可能想要以不同方式对结果进行排序的情况下,客户端上的排序实际上是优选的,例如,通过单击网格中的列标题,因为这可以在没有单独的数据库调用的情况下完成。