2011-02-09 2 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 개월 동안 판매 데이터를 얻었습니다. 이 세 가지 쿼리를 하나로 결합하고 싶습니다.

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