我创建了查询以获取畅销产品。现在,我想查询此结果,例如按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。
感谢。
答案 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行的性能差异。在用户可能想要以不同方式对结果进行排序的情况下,客户端上的排序实际上是优选的,例如,通过单击网格中的列标题,因为这可以在没有单独的数据库调用的情况下完成。