2016-06-22 4 views
0

在庫、数量、値を持つ材料、プラントの組み合わせを持つSQL Server内に1つのテーブルがあります。これは、ソースシステムの形式で入ってくるデータのステージングテーブルです。これらすべてのレコードを同じ品目番号で集計する必要がありますが、異なるプラントは、平均数量と値を持つ品目コードに基づいて1つのレコードに集計する必要があります。材料/工場コードを持つすべてのレコードを単一レコードに集計する方法

これは私が作業しているテーブルです。

enter image description here

私はこの1つが作業に最も近いもので、多くの異なるSQL文を試してみました。注意、Where句のマテリアルに関するSQLプロンプトは、SQLステートメントにコピーを貼り付けることなく、別のマテリアルを見ることができるようにするためのものです。

SELECT 
    material 
,plant 
,AVG(unrestricted) AS Unrestricted 
,AVG(valueunrestricted) AS valUnrestricted 
,SUM(ValueUnrestricted/unrestricted) AS UnitValue 
FROM 
    IBSCM01.stage.MB52 
WHERE 
    unrestricted IS NOT NULL AND 
    unrestricted > 0 AND 
    material = :material 
GROUP BY 
    material 
,plant 
,unrestricted 
,valueunrestricted; 

これは私が探していますどのような出力

enter image description here

で出力するすべての植物全体で集約された資料に基づいて単一のレコードです。マテリアルごとにグループ化すると、次のエラーがスローされます。

カラム 'IBSCM01.stage.MB52.Plant'は、集計関数またはGROUP BY句のいずれにも含まれていないため、選択リストでは無効です。

+0

「GROUP BYマテリアル」の場合はどうなりますか – JamieD77

+0

group by句に含まれていないフィールドごとに次のようになります。列 'IBSCM01.stage.MB52.Plant'は、集約関数またはGROUP BY句に含まれていないため、選択リストでは無効です。 – apesa

+0

これで、SelectからPlantを削除しました。これが機能している可能性があります。私は戻っていくつかの数学を行う必要がありますが、目の第二のセットを提供するかもしれません – apesa

答えて

0

DISTINCT値のCOUNTにHAVING句を追加するとどうなりますか?

SELECT 
    material 
,plant 
,AVG(unrestricted) AS Unrestricted 
,AVG(valueunrestricted) AS valUnrestricted 
,SUM(ValueUnrestricted/unrestricted) AS UnitValue 
FROM 
    IBSCM01.stage.MB52 
WHERE 
    unrestricted IS NOT NULL AND 
    unrestricted > 0 AND 
    material = :material 
GROUP BY 
    material 
,plant 
,unrestricted 
,valueunrestricted 
HAVING count(Distinct(material))>=1 

エラーが間違っていることを伝えているので、私は混乱しています。私はあなたが知っていると確信しています。集計関数でない限り、SELECTからの列なしでGROUP BYを使用することはできません。

あなたがリストアップした各プラントは1つのタイプのプラントであるため、グループ化すると各プラントごとに1つのグループが作成されます。

あなたがしたいのは、「すべてのプラントで集計されたマテリアルに基づいて1つのレコードを出力する」ことです。だから私はあなたが求めているものを完全に理解していない。

COUNT(プラント)を実行する場合は、植物列をGROUP BYに入れる必要はありません。これはあなたに物質と数を与えるでしょう。

+0

プラントがグループ化されている限り、これは機能しませんでした。それは材料まで集約されません。選択とグループ化からプラントを削除すると、それはうまくいきます。ありがとう – apesa

+0

私は混乱しています。なぜ植物をセレクトしなければなりませんか? – johnny

+0

Plant int私が言っていたのは、植物を取り除いても産出物に影響がないということでした。私が働いているデータセットを学んだとき、私は別の方向に進み、いくつかの改訂を行っていました。昨日のコメントフォームJamieD77は間違った方法を指摘し、すぐに正しく働いていました。私はあなたのSQLステートメントを試しましたが、Plantを削除した後、Having句の有無にかかわらず同じ結果が得られました。 – apesa

関連する問題