2014-03-25 25 views
0

我用Navicat创建了这个视图,但总和是错误的。 enter image description here为什么这个视图不能正确相加?

SELECT 
planeamento_conf.id_Plano AS id_Plano, 
planeamento_conf.plan_ConfEnc AS plan_ConfEnc, 
planeamento_conf.plan_Modelo AS plan_Modelo, 
planeamento_conf.plan_Total_Pecas AS plan_Total_Pecas, 
planeamento_conf.plan_Min_Peca AS plan_Min_Peca, 
planeamento_conf.plan_Confecao AS plan_Confecao, 
planeamento_conf.plan_Cap_Prod AS plan_Cap_Prod, 
planeamento_conf.plan_Horas_Dia AS plan_Horas_Dia, 
planeamento_conf.plan_Fatura AS plan_Fatura, 
confeccoes.Confeccao AS Confeccao, 
Sum(saidas_conf.Pecas_entregues) AS TotalSaidas, 
Sum(entradas_pa.Pecas_entregues) AS TotalEntradas 
FROM 
((planeamento_conf 
JOIN confeccoes ON ((planeamento_conf.plan_Confecao = confeccoes.ID_Confeccao)) 
JOIN saidas_conf ON ((planeamento_conf.id_Plano = saidas_conf.Plano)) 
JOIN entradas_pa ON ((planeamento_conf.id_Plano = entradas_pa.Plano))) 
GROUP BY 
planeamento_conf.id_Plano 

我要总结的领域是saidas_conf.Pecas_entregues和entradas_pa.Pecas_entregues 我有这个id_Plano常见的我已经在我的情况下同样使用了3台

+1

不能确定表结构,但是猜测你对于atas_conf上的每条记录都有entradas_pa上的多条记录。因此,当你在上述表达式中对记录求和时,每个值都被多次计数,每个匹配entradas_pa一次。 – Kickstart

+0

我有entradas_pa上的多个记录和saidas_conf上的每个id_Plano在planeamento_conf –

回答

1

认为你将不得不做的款项在几个子查询: -

SELECT 
    planeamento_conf.id_Plano AS id_Plano, 
    planeamento_conf.plan_ConfEnc AS plan_ConfEnc, 
    planeamento_conf.plan_Modelo AS plan_Modelo, 
    planeamento_conf.plan_Total_Pecas AS plan_Total_Pecas, 
    planeamento_conf.plan_Min_Peca AS plan_Min_Peca, 
    planeamento_conf.plan_Confecao AS plan_Confecao, 
    planeamento_conf.plan_Cap_Prod AS plan_Cap_Prod, 
    planeamento_conf.plan_Horas_Dia AS plan_Horas_Dia, 
    planeamento_conf.plan_Fatura AS plan_Fatura, 
    confeccoes.Confeccao AS Confeccao, 
    sub_saidas_conf.TotalSaidas, 
    sub_entradas_pa.TotalEntradas 
FROM 
planeamento_conf 
JOIN confeccoes ON ((planeamento_conf.plan_Confecao = confeccoes.ID_Confeccao)) 
JOIN (SELECT Plano, SUM(Pecas_entregues) AS TotalSaidas FROM saidas_conf GROUP BY Plano) AS sub_saidas_conf ON ((planeamento_conf.id_Plano = sub_saidas_conf.Plano)) 
JOIN (SELECT Plano, SUM(Pecas_entregues) AS TotalEntradas FROM entradas_pa GROUP BY Plano) AS sub_entradas_pa ON ((planeamento_conf.id_Plano = sub_entradas_pa.Plano)) 
GROUP BY 
planeamento_conf.id_Plano 

外集团可能现在不需要BY(取决于是否有上confeccoes重复,你需要消除 - 在这种情况下,DISTINCT可能是更好的选择)。

+0

作品,我只是添加))上的最后一个JOIN上的多个记录和总和是正确的 –

1

。对我来说,它已经奏效了。我希望它也能适用于你。

SELECT 
planeamento_conf.id_Plano AS id_Plano, 
planeamento_conf.plan_ConfEnc AS plan_ConfEnc, 
planeamento_conf.plan_Modelo AS plan_Modelo, 
planeamento_conf.plan_Total_Pecas AS plan_Total_Pecas, 
planeamento_conf.plan_Min_Peca AS plan_Min_Peca, 
planeamento_conf.plan_Confecao AS plan_Confecao, 
planeamento_conf.plan_Cap_Prod AS plan_Cap_Prod, 
planeamento_conf.plan_Horas_Dia AS plan_Horas_Dia, 
planeamento_conf.plan_Fatura AS plan_Fatura, 
confeccoes.Confeccao AS Confeccao, 
Sum(saidas_conf.Pecas_entregues) AS TotalSaidas, 
Sum(entradas_pa.Pecas_entregues) AS TotalEntradas 
FROM planeamento_conf 
JOIN confeccoes ON planeamento_conf.plan_Confecao = confeccoes.ID_Confeccao 
JOIN saidas_conf ON planeamento_conf.id_Plano = saidas_conf.Plano 
JOIN entradas_pa ON planeamento_conf.id_Plano = entradas_pa.Plano 
GROUP BY 
planeamento_conf.id_Plano 
相关问题