0

**************解決しましたが、より良い答えを歓迎します!:) **************

テーブルsc000から(sa003 * sa004)の合計を取得したいのですが、その前に、アイテムが他のテーブルに存在するかどうかを確認する必要があります。画像(一部のテーブルの列形式は同じです):

ここに画像の説明を入力してください

私は「IN」を使用します:

... WHERE s.sa002 IN (select b.b005 from b000 b where year(b.b001) = 2013 and month(b.b001) = 1)

しかし、それは長いプロセスを必要とするので、私は「LEFTJOIN」で試しています:

 SELECT s.sa002, Sum(s.SA003) AS qty, Sum(s.SA003*s.SA004) AS jumlah
 FROM sc000 s LEFT JOIN
 (select bs.b005 from b000 bs where year(bs.b001) = 2013 and month(bs.b001) = 1) b
   on s.sa002 = b.b005 LEFT JOIN
 (SELECT ps.p005 from p000 ps where year(ps.p001) = 2013 and month(ps.p001) = 1 ) p
   on s.sa002 = p.p005 LEFT JOIN
 (SELECT js.b005 from j000 js where year(js.b001) = 2013 and month(js.b001) = 1 ) j
   on s.sa002 = j.b005 LEFT JOIN
 (SELECT rs.b005 from Rev00 rs where year(rs.b001) = 2013 and month(rs.b001) = 1) rv
   on s.sa002 = rv.b005 LEFt JOIN
 (SELECT es.b005 FROM R000 es where year(es.b001) = 2013 and month(es.b001) = 1) re
   on s.sa002 = re.b005
 where year(s.sa005) = 2013 and month(s.sa005) = 1
 and (b.b005 is not null or p.p005 is not null or rv.b005 is not null or j.b005 is not null or re.b005 is not null)
 GROUP BY s.sa002  

結果は乗算されます。何か助けはありますか?:(

更新:このような結果が必要です(コード、sc002からの数量、数量*価格):

ここに画像の説明を入力してください

^他のテーブルをチェックせずに。

次に、左結合を使用すると、次のような結果になります。

ここに画像の説明を入力してください

4

2 に答える 2

0

結合の1つ(または一部)が1対1の関係でリンクされていません。確認する最も簡単な方法は、group byおよびsum()ステートメントを削除し、b、p、j、rv、およびreテーブルから次のようにいくつかの列を含めることです。

SELECT s.sa002, s.SA003 AS qty, s.SA003*s.SA004 AS  jumlah, g.gName as gNames, 
 p.p005, j.b005, rv.b005, re.b005
 FROM sc000 s LEFT JOIN
 (select bs.b005 from b000 bs where year(bs.b001) = 2013 and month(bs.b001) = 1) b
   on s.sa002 = b.b005 LEFT JOIN
 (SELECT ps.p005 from p000 ps where year(ps.p001) = 2013 and month(ps.p001) = 1 ) p
   on s.sa002 = p.p005 LEFT JOIN
 (SELECT js.b005 from j000 js where year(js.b001) = 2013 and month(js.b001) = 1 ) j
   on s.sa002 = j.b005 LEFT JOIN
 (SELECT rs.b005 from Rev00 rs where year(rs.b001) = 2013 and month(rs.b001) = 1) rv
   on s.sa002 = rv.b005 LEFt JOIN
 (SELECT es.b005 FROM R000 es where year(es.b001) = 2013 and month(es.b001) = 1) re
   on s.sa002 = re.b005
 where year(s.sa005) = 2013 and month(s.sa005) = 1
 and (b.b005 is not null or p.p005 is not null or rv.b005 is not null or j.b005 is not null or re.b005 is not null)
ORDER BY s.sa002

または、さらに良い、

 SELECT s.sa002, count(*)
 FROM sc000 s LEFT JOIN
 (select bs.b005 from b000 bs where year(bs.b001) = 2013 and month(bs.b001) = 1) b
   on s.sa002 = b.b005 LEFT JOIN
 (SELECT ps.p005 from p000 ps where year(ps.p001) = 2013 and month(ps.p001) = 1 ) p
   on s.sa002 = p.p005 LEFT JOIN
 (SELECT js.b005 from j000 js where year(js.b001) = 2013 and month(js.b001) = 1 ) j
   on s.sa002 = j.b005 LEFT JOIN
 (SELECT rs.b005 from Rev00 rs where year(rs.b001) = 2013 and month(rs.b001) = 1) rv
   on s.sa002 = rv.b005 LEFt JOIN
 (SELECT es.b005 FROM R000 es where year(es.b001) = 2013 and month(es.b001) = 1) re
   on s.sa002 = re.b005
 where year(s.sa005) = 2013 and month(s.sa005) = 1
 and (b.b005 is not null or p.p005 is not null or rv.b005 is not null or j.b005 is not null or re.b005 is not null)
 GROUP BY s.sa002  
 HAVING count(*) > 1
于 2013-02-13T04:55:44.873 に答える
0

この質問を見たり、助けようとしたりしてくれたすべての人に感謝します。:D

私はすでにクエリを見つけました!

UNIONを使用して5つのテーブルを結合し、必要な答えを取得しました。

于 2013-02-13T09:59:35.607 に答える