2016-06-26 18 views
0

私は後になってしまった結果を返すためにMySQLを手に入れることができず、誰かが私が間違っているところで私にいくつかのポインタを与えることができると願っています。 Sales_Areaには3つのテーブル(Sales_Area、Orders、Rooflight_Request)があり、OrderにはSales_Areaに属するSales_Area_ID列が含まれているため、Sales_Areaには多くの注文があります。 Rooflight_RequestにはOrder_IDが含まれているため、オーダーは多くのRooflight_Requestを持つことができます。MySQLサブクエリの結び付きとグループ化の結果

Rooflight_Requestには製品が含まれていますが、販売エリアごとにグループ分けされた注文から、屋根灯の合計(価格、割引、通貨レート、および数量を考慮する式)を合計しようとしています。私はこのクエリを実行すると

SELECT salesArea.Area_Name, 
(SELECT SUM(((rr.Price - (rr.Price * (rr.Discount /100)))/orders.Currency_Rate) * rr.Quantity) 
    FROM Rooflight_Request AS rr 
    WHERE rr.Order_ID = orders.Order_ID 
    AND rr.Record_Active = 1 
    AND rr.Alternative_Option <> 1 
) AS Rooflights_Total 
FROM Sales_Area AS salesArea 
    LEFT JOIN Orders AS orders ON 
     salesArea.Sales_Area_ID = orders.Sales_Area_ID 
    LEFT JOIN Users AS users ON 
     salesArea.User_ID = users.User_ID 
GROUP BY salesArea.Area_Name 

を結果は、販売エリアごとにグループ化されていますが、私は唯一の価値の価値が単一の注文を取得しています。グループをオーダーに交換すると、オーダーIDの結果セットにすべてのオーダーと商品が含まれますが、販売エリア別にグループ化されていないため、何千ものレコードが返されます。誰かが私が間違っている場所にアドバイスできますか?ありがとう。

+0

正確に何を取得しますか?グループごとに1つの行?? – sagi

+0

テーブルスキーマと期待される結果セットを追加すると、他の人が手助けするのに役立ちます –

+0

私が達成しようとしている結果セットは、Rooflights_Totalを含む各行のSales_Area(たとえばUSAとEUROPE)その販売エリアに取り付けられているすべてのオーダーのすべての屋上ライト(製品))。上記のクエリでは、私は1つの順序から合計を取得します。私がorder_IDにグループをスワップすると、各注文ごとにそれぞれの合計を持つ行が得られます。だから、私はこれらの注文をまとめて販売エリアに集める必要があります。 – JamesB

答えて

1

するためにRRを結ぶ試してみてください間違っていると思う

SELECT SA.Area_Name、SUM((RR.Price *(RR.Discount/100)))/ O.CuRRency_Rate)* RR.Quantity)FROM Sales_Area SA INNER JOINオーダーO ON SA.Sales_Area_ID = O.Sales_Area_ID INNER JOIN Rooflight_Request RR ON RR.Order_ID = O.Order_ID WHERE RR.Record_Active = 1 およびRR.Alternative_Option <> 1 GROUP BY SA.Area_Na私。

+0

ファンタスティック、ありがとう、私はそれを入れて、私は今、私はちょうどこの配置を使用して、本当に役立つ他の部分を追加することができます結果を得る! – JamesB

+0

あなたが助けたいと思ったら私に教えてください –

1

構造体あなたには、QUERY探して、私はそれが動作する合計のための副選択が..あなたが(私のopinio)はこれを試してみてください他のテーブル

SELECT salesArea.Area_Name, SUM(((rr.Price - (rr.Price * (rr.Discount /100)))/orders.Currency_Rate) * rr.Quantity) 
FROM FROM Rooflight_Request AS rr 
INNER JOIN Orders ON r.Order_ID = orders.Order_ID 
LEFT JOIN Orders AS orders ON 
    salesArea.Sales_Area_ID = orders.Sales_Area_ID 
LEFT JOIN Users AS users ON 
    salesArea.User_ID = users.User_ID 
WHERE rr.Record_Active = 1 
    AND rr.Alternative_Option <> 1 
GROUP BY salesArea.Area_Name 
+0

scaisEdge本当に便利です。問題は今私が質問を簡略化しているので、私がそれを書いていたときに試して意味をなすことができた。私はまた、他の製品テーブルを持っています。 Extras_Request。結果にこれらのテーブルの合計が必要です。したがって、最初の商品テーブル(Rooflight_Request)に入力するためにクエリをスワップすると、他の商品の合計を結果に戻すことはできません。私は最初の質問にそれを入れておくべきだったが、私は誰かがそのコンセプトを手伝った後で、自分でそれらのビットを追加できると思っていた。もちろん、この解決策はありません。 – JamesB

+0

@scaisEdgeなぜ結果をユーザーテーブルに結びつけますか?彼らはそれに依存していないし、望ましくない参加を追加するでしょうか? –

+0

こんにちはMahesh、私はその領域に焦点を絞っていた部分を簡素化していたユーザーテーブルといくつかの他のテーブルに条件があります。あなたが与えた答えは、私が今すべてを入れてくれます。ありがとう – JamesB

関連する問題