2017-03-28 4 views
-1

SQL Serverは初めてですが、PL/SQLを少し使用しました。
部品番号を取得して在庫を集計するクエリを作成しようとすると、過去180日間に販売されたQTYの平均が計算されます。これは私がこれまで持っていたものです。同じ部品番号のすべて、1つのテーブルからのSUM、別のテーブルからのSUM

SELECT 
    S.PartNum, S.PartDescription, S.CLASSID, SUM(D.STOCK), AVG(S2.QTY)  
    FROM PARTWHSE AS D  
    JOIN PART AS S ON S.PartNum = D.PartNum 
    LEFT JOIN PARTTRAN AS S2 ON S2.PartNum = S.PartNum 
    WHERE S.TRACKCODE = 0 
    AND S2.TRANDATE >= (GETDATE() -180) 
    GROUP BY PartNum, PartDescription, CLASSID; 

問題は、私の合計が、私はそれを合計するとき、それはあまりにも多くの行に持っていると信じて私をリードしている、(以上)の方法オフで来て続けています。平均値は問題ありません。平均値なしの合計は問題ありません。

サンプルデータ表01
PartNum |株式|
101.123 | 100 |
101.123 | 250 |
101.123 | 150 |

サンプルデータ表02

PartNum | QTY
101.123 | 200
101.123 | 200
101.123 | 200

現在の結果 S.PartNum | Sum(D.STOCK) | AVERAGE (S2.QTY)
101.123 | 3,000 | 200

希望の結果 S.PartNum | Sum (STOCK) | AVERAGE (S2.QTY)
101.123 | 500 | 200

ご協力いただければ幸いです。好ましくは、単一のクエリで。

+0

3つのテーブルすべてのサンプルデータを投稿してください。より良いヘルプがあります。 – etsa

答えて

0

2つのサブクエリを適切な集計関数とグループ化を使用して使用します。 STOCKとQTYのテーブルが異なり、このテーブルの行間に(タイムスタンプやその他のキーによって)相関関係がないというデータの問題。

select p.PartNum, isnull(s.Stock, 0) as Stock, isnull(q.Qty, 0) as Qty 
from PART p 
left join 
(
    select s.PartNum, sum(s.Stock) as Stock 
    from PARTWHSE s 
    group by s.PartNum 
) s on s.PartNum = p.PartNum 
left join 
(
    select q.PartNum, avg(q.QTY) as Qty 
    from PARTTRAN q 
    group by q.PartNum 
) q on q.PartNum = p.PartNum
+0

ありがとうOryol。これにスポットがうまくいきました。サブクエリFTW – Darreningym

関連する問題