2011-02-09 4 views
0

OK、私たちはそれぞれのクライアントに対して多くの売上データを持っています。私は、単純なクエリを使用して、各営業担当者の売上の合計容量を取得するクエリを見つけることが簡単にできました:MySQLクエリを組み合わせると、間違った回答が返される

SELECT `MerchantAddresses`.`Rep Number` AS `Rep Number`, 
      SUM(`RESIDUALS_2010_12`.`Qual Cr Vol` + `RESIDUALS_2010_12`.`Qual Ch Vol`) AS `VOL_2010_12`, 
      `Reps`.`First` AS `First`, 
      `Reps`.`Last` AS `Last` 
FROM  `MerchantAddresses`, `RESIDUALS_2010_12`, `Reps` 
WHERE `RESIDUALS_2010_12`.`MID` = `MerchantAddresses`.`MID` AND 
      `Reps`.`ID` = `MerchantAddresses`.`Rep Number` 
GROUP BY `MerchantAddresses`.`Rep Number` 
ORDER BY SUM(`RESIDUALS_2010_12`.`Qual Cr Vol` + `RESIDUALS_2010_12`.`Qual Ch Vol`) DESC 

このコードは、単一の販売担当者による総売上高をグループ化テーブルを返し、完全に正常に動作します月。現時点では、販売データを3か月間取得するために3つのクエリを実行しています。これらの3つのクエリを1つにまとめたいと思います。

SELECT `MerchantAddresses`.`Rep Number` AS `Rep Number`, 
      SUM(`RESIDUALS_2010_12`.`Qual Cr Vol` + `RESIDUALS_2010_12`.`Qual Ch Vol`) AS `VOL_2010_12`, 
      SUM(`RESIDUALS_2010_11`.`Qual Cr Vol` + `RESIDUALS_2010_11`.`Qual Ch Vol`) AS `VOL_2010_11`, 
      SUM(`RESIDUALS_2010_10`.`Qual Cr Vol` + `RESIDUALS_2010_10`.`Qual Ch Vol`) AS `VOL_2010_10`, 
      `Reps`.`First` AS `First`, 
      `Reps`.`Last` AS `Last` 
FROM  `MerchantAddresses`, `RESIDUALS_2010_12` JOIN ON `RESIDUALS_2010_11` JOIN ON `RESIDUALS_2010_10`, `Reps` 
WHERE `RESIDUALS_2010_12`.`MID` = `MerchantAddresses`.`MID` AND 
      `RESIDUALS_2010_11`.`MID` = `MerchantAddresses`.`MID` AND 
      `RESIDUALS_2010_10`.`MID` = `MerchantAddresses`.`MID` AND 
      `Reps`.`ID` = `MerchantAddresses`.`Rep Number` 
GROUP BY `MerchantAddresses`.`Rep Number` 
ORDER BY SUM(`RESIDUALS_2010_12`.`Qual Cr Vol` + `RESIDUALS_2010_12`.`Qual Ch Vol`) DESC 

私は何を発見したことは、私が実際にこのクエリで不正な値を得ることである:

だから、私は次のようでした。それは動作しますが、私は各販売担当者のために得るボリューム値は実際には小さすぎます...

アイデア?ありがとう!

答えて

1

私はあなたが本当にそのように関連していないので、これらの毎月のテーブルに参加することはできないと思う。彼らは同じ商人の住所を共有しますが、それだけです。

UNION ALLを使用すると、複数のクエリの結果を組み合わせることができます。これにより、サブクエリ内のすべての月ごとのレコードの価値を取得し、それらを親で合計することができます。

私はあなたの質問にいくつかのエイリアシングを追加しました。

SELECT 
    m.`Rep Number`, 
    SUM(m.vol10) as VOL_2010_10, 
    SUM(m.vol11) as VOL_2010_11, 
    SUM(m.vol12) as VOL_2010_12, 
    m.First, 
    m.Last 
FROM 
    (
    SELECT 
    ma.`Rep Number`, 
    r10.`Qual Cr Vol` + r10.`Qual Ch Vol` AS vol10, 
    null as vol11, 
    null as vol12 
    FROM 
    MerchantAddresses ma 
    INNER JOIN RESIDUALS_2010_10 as r10 on r10.MID = ma.MID 
    UNION ALL 
    SELECT 
    ma.`Rep Number`, 
    null as vol10, 
    r11.`Qual Cr Vol` + r11.`Qual Ch Vol` AS vol11, 
    null as vol12 
    FROM 
    MerchantAddresses ma 
    INNER JOIN RESIDUALS_2010_11 as r11 on r11.MID = ma.MID 
    UNION ALL 
    SELECT 
    ma.`Rep Number`, 
    null as vol10, 
    null as vol11, 
    r12.`Qual Cr Vol` + r12.`Qual Ch Vol` AS vol12 
    FROM 
    MerchantAddresses ma 
    INNER JOIN RESIDUALS_2010_12 as r12 on r12.MID = ma.MID 
) m 
    INNER JOIN Reps r ON r.ID = m.`Rep Number` 
GROUP BY 
    m.`Rep Number` 
ORDER BY 
    SUM(m.vol12) DESC 
+0

あなたは素晴らしい友達です。 – altexpape

関連する問題