AJUDA COM QUERY DE SQL Q CONTENHAM A CLAUSULA SUM

GAZEVEDO 11/07/2013 10:06:12
#425854
Bom-Dia !!!

Tenho a seguinte situação.Preciso pegar dados em duas tabelas (Porta e Janela)
somar os itens e jogar somando em outra tabela (Total_Desconto).

VEJA O EXEMPLO:

*PORTAS
-------------------------------------------------------------------
COD_AMB | COD_OBRA | AREA | VOLUME | PERIMETRO | AREA DO PERIMETRO |
-----------------------------------------------------------------------------------------------------------------------------|
1 | 1 | 3,96 | 0,594 | 10,60 | 1,59 |
3 | 1 | 1,98 | 0,297 | 05,30 | 0,795 |
-----------------------------------------------------------------------------------------------------------------------------

*JANELAS
-------------------------------------------------------------------
Cod_Amb | COD_OBRA | AREA | VOLUME | PERIMETRO | AREA DO PERIMETRO |
-------------------------------------------------------------------------------------------------------------------------------
1 | 1 | 2,21 | 0,332 | 04,30 | 0,645 |
1 | 1 | 4,42 | 0,664 | 08,60 | 1,290 |
3 | 1 | 2,21 | 0,332 | 04,30 | 0,645 |
------------------------------------------------------------------------------------------------------------------------------

*TOTAL_DESCONTO
------------------------------------------------------------------------------------------------------------------------------------------------------------------|
COD_AMB| COD_OBRA | TOTAL_AREA | TOTAL_VOLUME | TOTAL_PERIMETRO | TOTAL_AREAERIMETRO |
------------------------------------------------------------------------------------------------------------------------------------------------------------------|


Dou o seguinte select

SELECT J.Cod_Ambiente AS Ambiente,J.Cod_Obra AS Obra,SUM(J.Total_Area) AS Total_Area,SUM(J.Total_Volume) AS Total_Volume,
SUM(J.Total_Perimetro) AS Total_Perimetro,SUM(J.Total_AreaPerimetro) AS Total_AreaPerimetro,SUM(J.Soma_Largura)AS SomaLargura,
SUM(J.Total_Verga) AS TotalVerga,TD.Area,TD.Volume,TD.Perimetro,TD.Area_Perimetro,TD.Total_SomaLargura,TD.Total_TotalVerga,
SUM(P.Total_Area) AS Total_AreaPorta,SUM(P.Total_Volume) AS Total_VolumePorta,SUM(P.Total_Perimetro) As Total_PerimetroPorta,
SUM(P.Total_AreaPerimetro) AS Total_AreaPerimetroPorta,SUM(P.Soma_Largura) AS Soma_LarguraPorta,SUM(P.Total_Verga) AS Total_VergaPorta
FROM ((Janela J
LEFT JOIN Total_Desconto_PJV TD ON J.Cod_Ambiente=TD.Cod_Ambiente AND J.Cod_Obra=TD.Cod_Obra)
LEFT JOIN Porta P ON J.Cod_Ambiente=P.Cod_Ambiente AND J.Cod_Obra=P.Cod_Obra)
WHERE J.Cod_Obra = 1
GROUP BY J.Cod_Ambiente,J.Cod_Obra,TD.Area,TD.Volume,TD.Perimetro,TD.Area_Perimetro,TD.Total_SomaLargura,
TD.Total_TotalVerga,P.Total_Area,P.Total_Volume,P.Total_Perimetro,P.Total_AreaPer
imetro,P.Soma_Largura,P.Total_Verga



SÓ QUE ME RETORNA TOTAL_AREAPORTA O VALOR DE 7,92 AO INVéS DE 3,96,
GOSTARIA DE SABER O QUE ESTOU FAZENDO DE ERRADO.ESTOU PROGRAMANDO EM VB6 E O BANCO é ACCESS.

ME AJUDEM POR FAVOR !!!

Abraços.
LLAIA 11/07/2013 11:19:15
#425862
Como vc tá fazendo um Join onde tem um relação 1 x 2 nessas condições para o Cod_Obra = 1, o seu select sem SUM e GROUP BYobviamente, como vc poderá testar, vai está mostrando a repetição os registros da tabela Porta. Faça o teste.

Experimente usar UNION antes de realizar a consulta com GROUP BY
GAZEVEDO 11/07/2013 14:08:01
#425895
Citação:

:
Como vc tá fazendo um Join onde tem um relação 1 x 2 nessas condições para o Cod_Obra = 1, o seu select sem SUM e GROUP BYobviamente, como vc poderá testar, vai está mostrando a repetição os registros da tabela Porta. Faça o teste.

Experimente usar UNION antes de realizar a consulta com GROUP BY

Citação:

:
Como vc tá fazendo um Join onde tem um relação 1 x 2 nessas condições para o Cod_Obra = 1, o seu select sem SUM e GROUP BYobviamente, como vc poderá testar, vai está mostrando a repetição os registros da tabela Porta. Faça o teste.

Experimente usar UNION antes de realizar a consulta com GROUP BY






Leandro Laia....
Fiz assim

SELECT Cod_Ambiente,Cod_Obra,SUM(Total_Area),SUM(Total_Volume)
FROM Porta
WHERE Cod_Obra=1
GROUP BY Cod_Ambiente,Cod_Obra
UNION
SELECT Cod_Ambiente,Cod_Obra,SUM(Total_Area),SUM(Total_Volume)
FROM Janela
WHERE Cod_Obra=1
GROUP BY Cod_Ambiente,Cod_Obra

como faço para dar nome para o SUM(Total_Area) da porta e da janela para que eu possa depois atribuir a uma variável a soma dos dois ?!
LLAIA 11/07/2013 14:36:17
#425900
Se vc achar mais fácil, salva essa query em uma view/consulta, ou vc pode fazer assim:

SELECT SUM(T.CAMPO) AS ... 
FROM (SELECT Cod_Ambiente,Cod_Obra,SUM(Total_Area),SUM(Total_Volume)
FROM Porta WHERE Cod_Obra=1
UNION
SELECT Cod_Ambiente,Cod_Obra,SUM(Total_Area),SUM(Total_Volume)
FROM Janela
WHERE Cod_Obra=1) AS T

GROUP BY T.OUTRO_CAMPO


GAZEVEDO 12/07/2013 08:46:38
#425932
Citação:

:
Se vc achar mais fácil, salva essa query em uma view/consulta, ou vc pode fazer assim:

SELECT SUM(T.CAMPO) AS ... 
FROM (SELECT Cod_Ambiente,Cod_Obra,SUM(Total_Area),SUM(Total_Volume)
FROM Porta WHERE Cod_Obra=1
UNION
SELECT Cod_Ambiente,Cod_Obra,SUM(Total_Area),SUM(Total_Volume)
FROM Janela
WHERE Cod_Obra=1) AS T

GROUP BY T.OUTRO_CAMPO




Leando Laia !

FIz o que você falo,só que não acha a o campo.
Estou pensando em fazer o seguinte gravar em uma tabela temporaria a consulta e depois pego e somo novamente,tentei fazer um INSERT com esse SELECT com UNION mais não consegui será que tem como você me passar a syntaxe?

Abraços !
LLAIA 12/07/2013 15:53:20
#425961
Brother, me manda um mdb com essas tabelas e registros. Dá pra fazer com views. :)
Faça seu login para responder