3

私はこれらのテーブルを持っています、 rollsそしてrollsout。左アウタージョインを行いたいのですが。

ロールズ

          |type|height|weight|Rate|
          -------------------------
          |RP  |2ft   | 200  | 100|
          |RP  |2ft   | 200  | 100|
          |RP  |2ft   | 200  | 100|
          |LD  |2ft   | 100  | 130|

ロールアウト

          |type|height|weight|Rate|
          -------------------------
          |RP  |2ft   | 200  | 100|
          |RP  |2ft   | 200  | 100|

SUM、JOIN、およびGROUPingの後に期待される出力==>

          |type|height|SUM(rolls.weight)|SUM(rollsout.weight)|
          ----------------------------------------------------
          |RP  |2ft   | 600             | 400                |
          |LD  |2ft   | 100             | NILL               |

私のコード:

 SELECT rolls.hight,rolls.type,SUM(rolls.weight),SUM(rollsout.weight)
 FROM rolls 
 LEFT OUTER JOIN rollsout 
 ON rolls.hight = rollsout.hight AND rolls.type= rollsout.type 
 GROUP BY rolls.hight,rolls.type

しかし、上記のコードのO/Pは

          |type|height|SUM(rolls.weight)|SUM(rollsout.weight)|
          ----------------------------------------------------
          |RP  |2ft   | 1200            | 1200               |
          |LD  |2ft   | 100             | NILL               |

どこが間違っているのかわかりません—説明してもらえますか?

4

2 に答える 2

3

あなたは何も悪いことをしていません。それがJOINの振る舞いです

左側の行数 X 右側の行数であり、あなたの場合は 3 x 2 = 6 です。6 x 200 = 1200

これを試して

Select rolls.height,rolls.type, SUM(rolls.weight) as W, rollsout.Ww
 FROM rolls 
 LEFT JOIN
       (Select height,type, SUM(weight) as Ww 
         From rollsout GROUP BY height, type
       ) as rollsout
ON rolls.height = rollsout.height AND 
rolls.type= rollsout.type 
GROUP BY rolls.height,rolls.type

SQLフィドル

これが SQL Server では機能しないことはわかっていますが、MySQL では機能しました。

于 2012-10-27T00:36:22.227 に答える
0

タイプ RP の Rollsout の各行のすべてのロールを合計しています。ロールアウトから個別の行を取得する必要があります。

SELECT rolls.hight,rolls.type,SUM(rolls.weight),SUM(R2.weight)
 FROM rolls 
 LEFT OUTER JOIN (SELECT DISTINCT * FROM rollsout) AS R2 ON  
 ON rolls.hight = R2.hight AND rolls.type= R2.type 
 GROUP BY rolls.hight,rolls.type
于 2012-10-27T00:28:02.120 に答える