2011-02-09 49 views
0

好了,我們有很多的銷售數據爲每一位客戶。我已經可以輕鬆找到所需的查詢使用簡單的查詢,以獲得銷售爲每個銷售代表的總容積:結合的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個月的銷售數據。我想將這三個查詢合併爲一個。

所以,我做了以下內容:

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 2011-02-10 00:01:18