2012-02-07 9 views
1

注文の詳細を持つ受注テーブルとカテゴリが注文のタイプであるカテゴリという名前の列があります。照会時に特定のカテゴリに配置された合計受注を取得します。受注の詳細

お客様は注文の詳細を検索できます。

今私がショーにそのカテゴリのすべての顧客によって置か受注総額が表示されます注文の詳細とTotalOrderという列をクエリを記述したいのか、

例セイ注文表

OrderID CustomerID OrderDetails Category 
1   1   test   A1 
2   1   test1  A2 
3   2   test3  A2 
4   3   test4  A2 
のようなオーダーIDのクエリは1

それは注文IDを持つようになりますので、場合

OrderID Cust_ID  OrderDetails Category  TotalOrdersInThisCategory 
2   1   test   A2   3  

このシナリオは、実際の問題のデモンストレーションです。

これをどのように達成できますか?

1つのクエリでOrderディテールを取得し、Category句でグループを別のクエリで取得してから内部結合を行う必要がありますか。どんな良いアイデアもあります。

注文の詳細には、数百万のレコードが含まれます。

すべてのヘルプは高く評価され

この質問のいくつかのより良いタイトルを提案してください

+0

私はあなたの例を理解していません、あなたは 'OrderId' 2と言っていましたが、' OrderdId' 1と3合計を 'A1'というカテゴリーに入れました... – Lamak

+0

@Lamak本当に申し訳ありませんが、誤ってA2の代わりにA1を書いてください。私はこの問題をDryの原則に違反することで解決しています。カテゴリ別にCTEを作成してから、クエリで内部結合を行うので、より良い例を提供してください。 – Moons

答えて

0
SELECT 
    OrderID, 
    Cust_ID, 
    OrderDetails, 
    Category, 
    (select count(*) from orders where category = o.category) TotalOrdersInThisCategory 
FROM 
    Orders o 

またはあなたはこれを試みることができる:

SELECT 
    o.OrderID, 
    o.Cust_ID, 
    o.OrderDetails, 
    o.Category, 
    c.TotalOrdersInThisCategory 
FROM 
    Orders o 
INNER JOIN (select category, count(*) from orders group by category) c 
     ON o.Category = c.Category 
+0

私の注文テーブルには何千万ものレコードがあるので、何百もの注文を検索しようとすると、このコードで非常に大きなパフォーマンスが得られます。したがって、これは生産目的には役に立たないかもしれません。またはあなたは何を思う? – Moons

+0

最善の方法は、2つのアプローチをプロファイルし、どのプラットフォームが最適かを確認することです。私は元の答えにそれをする別の方法を追加しました.. – StevieG

+0

実際には2番目の方法は最初のよりも優れていますが、私はちょうど代わりにCTEを使用して同じ方法でやっている(select category、count(*)ordersグループカテゴリ別)c。しかし、速度に差はありませんが、投稿のためにありがとうございます。 – Moons

2

あなたはこれを試してみて、それかどうかを確認することができますより良い実行:

SELECT * 
FROM ( SELECT *, COUNT(*) OVER(PARTITION BY Category) TotalOrdersInThisCategory 
     FROM OrderTable) A 
WHERE OrderId = 2 
+0

いいえ、SELECT *、COUNT(*)OVER(PARTITION BYカテゴリ)TotalOrdersInThisCategory FROM OrderTableはあまりにも多くの時間を要します。 – Moons

関連する問題