表Bは計画値を保持します。表Mは実際の値を保持する。テーブルBのすべての行を見つける必要があります。実際の値(つまり結合された行)はテーブルMにありません。また、結合された行には実際の値の行が異なっています。これを実現するために、外部結合と集計...グループを組み合わせて試行していますが、テーブルBの「孤児」が返されていないため、これは機能しません。左結合/合計/グループを持つSQL Server
私のクエリは次のとおりです。 -
SELECT B.Id, B.Date, b.Ref,SUM(M.Actual_Volume), SUM(B.Planned_Volume),
SUM(M.Actual_Value),SUM(B.Planned_Value)
FROM
TableB B
left JOIN TableM M on M.Id = B.Id
inner JOIN TableX on TableX.FieldX = B.FieldX
WHERE TableX.FieldY = (SELECT T.FieldY from TableX T where T.FieldX = 408344)
AND TableX.FieldZ = (SELECT T1.FieldZ from TableX T1 where T1.FieldX = 408344)
group by B.Id, B.Date, B.Ref
having SUM(M.Actual_Volume) <> SUM(B.Planned_Volume)
OR SUM(M.Actual_Value) <> SUM(B.Planned_Value)
order by b.Id
私が代わりに<の=を使用する場合>実績を比較すると、私が参加した行を取得し、私は実績が計画を等しくない行を必要とする計画、または計画されているが実際のものがない場所。
ありがとうございます!
Table B
Id planned_vol planned val
19 2 350
28 1 100
53 3 650
61 1 50
Table M
M.Id B.Id actual_vol actual_val
58 19 2 350
65 28 1 100
66 53 1 150
ので、クエリが返す必要があり、
B.Id
53 (because planned_vol <> actual_vol and planned_val <> actual_val)
61 (because B.Id 61 is not in table M)
HTH!
あなたが(両方の理由で)返され、そうでない少なくとも1行たい行のためのいくつかのサンプルデータを表示してくださいすることができ返されたい。 –
クイックフィックスは、 'SUM(M.Actual_Volume)is nullまたはSUM(M.Actual_Value)is null 'をhaving節に追加することですが、n:m関係の両辺を合計しようとしていると思います。これでデータの複製が終了します。 MとBの間のあなたのスキーマと関係についての詳細を投稿できますか? –
はい、TableMへのtableBはm:mです。定義テーブルがTableX – epx