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し、それを DataSource として使用することで実行できます。しかし、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 に答える