0

我创建了查询来获取最畅销的产品。现在,我想查询这个结果,例如,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 子句,有时是有害的或不给出结果,所以,我想知道如何做到这一点?

我可以通过排序在 .NET 中执行此操作DataTable,并将其用作数据源。但是如何在 SQL SERVER 中完成呢?

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

谢谢。

4

2 回答 2

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
于 2013-02-27T03:55:24.940 回答
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 行的性能差异。在用户可能希望以不同方式对结果进行排序(例如通过单击网格中的列标题)的情况下,在客户端上进行排序实际上是更可取的,因为这可以在没有单独的数据库调用的情况下完成。

于 2013-02-27T03:56:57.417 回答