AJUDA COM QUERY DE SQL Q CONTENHAM A CLAUSULA SUM
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.
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.
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
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
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 ?!
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
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 !
Brother, me manda um mdb com essas tabelas e registros. Dá pra fazer com views. :)
Faça seu login para responder