Como Inibir um campo numa SELECT / LEFT JOIN para que ele não se REPITA
Caros colegas do forum.
Estou com um problema em um relacionamento de tabelas no SQL e gostaria de uma ajuda.
Fiz um relacionamento entre 2 tabelas. VENDAS x FORMA_PAGTO
Os campos da tbl VENDAS são :
IDNOTA, DATA, VALOR_TOTAL_VENDA
Os seus dados para Exemplo são,
120036, 15-10-14, 100,00
120057, 15-10-14,310,00
Os campos da tbl FORMA_PAGTO são:
IDFPAGTO, IDNOTA, COD_FORMA_PAGTO, VALOR_PAGTO
Os dados são
1, 120036,1,50,00
2, 120036,4,50,00
3, 120057,1,101,00
4, 120057,3,105,00
5, 120057,6,104,00
--
Fiz o seguinte select
Select IDNOTA, DATA, VALOR_TOTAL_VENDA, COD_FORMA_PAGTO, VALOR_PAGTO from VENDAS VE
LEFT JOIN FORMA_PAGTO FP on VE.IDNOTA = FP.IDNOTA
E o resultado veio
IDNOTA, DATA, VALOR_TOTAL_VENDA, COD_FORMA_PAGTO, VALOR_PAGTO
120036, 15-10-14, 100,00, 1, 50,00
120036, 15-10-14, 100,00, 2, 50,00
120057, 15-10-14, 310,00, 1, 101,00
120057, 15-10-14, 310,00, 3, 105,00
120057, 15-10-14, 310,00, 6, 104,00
No requisito que tenho que atender para um relatório, Eu preciso Somar os valores do Campo NOTA, assim como os Valores das Parcelas efetuadas pela Forma de Pagamento, sendo que o PROBLEMA é que o campo VALOR_TOTAL_VENDA se repete nesta consulta.
Há alguma maneira para que o valor do campo VALOR_TOTAL_VENDA não se repita a partir da 2a. ocorrencia da SELECT ? ou
Teria como refazer o SQL para que este Requisito fosse atendido, Talvez com o uso de um UNION por Exemplo?
Desde já agradeço a ajuda.
Estou com um problema em um relacionamento de tabelas no SQL e gostaria de uma ajuda.
Fiz um relacionamento entre 2 tabelas. VENDAS x FORMA_PAGTO
Os campos da tbl VENDAS são :
IDNOTA, DATA, VALOR_TOTAL_VENDA
Os seus dados para Exemplo são,
120036, 15-10-14, 100,00
120057, 15-10-14,310,00
Os campos da tbl FORMA_PAGTO são:
IDFPAGTO, IDNOTA, COD_FORMA_PAGTO, VALOR_PAGTO
Os dados são
1, 120036,1,50,00
2, 120036,4,50,00
3, 120057,1,101,00
4, 120057,3,105,00
5, 120057,6,104,00
--
Fiz o seguinte select
Select IDNOTA, DATA, VALOR_TOTAL_VENDA, COD_FORMA_PAGTO, VALOR_PAGTO from VENDAS VE
LEFT JOIN FORMA_PAGTO FP on VE.IDNOTA = FP.IDNOTA
E o resultado veio
IDNOTA, DATA, VALOR_TOTAL_VENDA, COD_FORMA_PAGTO, VALOR_PAGTO
120036, 15-10-14, 100,00, 1, 50,00
120036, 15-10-14, 100,00, 2, 50,00
120057, 15-10-14, 310,00, 1, 101,00
120057, 15-10-14, 310,00, 3, 105,00
120057, 15-10-14, 310,00, 6, 104,00
No requisito que tenho que atender para um relatório, Eu preciso Somar os valores do Campo NOTA, assim como os Valores das Parcelas efetuadas pela Forma de Pagamento, sendo que o PROBLEMA é que o campo VALOR_TOTAL_VENDA se repete nesta consulta.
Há alguma maneira para que o valor do campo VALOR_TOTAL_VENDA não se repita a partir da 2a. ocorrencia da SELECT ? ou
Teria como refazer o SQL para que este Requisito fosse atendido, Talvez com o uso de um UNION por Exemplo?
Desde já agradeço a ajuda.
Sergio Santos
Curtidas 0
Respostas
Alan Marcel
15/10/2014
O que vc acha de utilizar o SELECT DISTINCT ?
Select DISTINCT IDNOTA, DATA, VALOR_TOTAL_VENDA, COD_FORMA_PAGTO, VALOR_PAGTO from VENDAS VE
LEFT JOIN FORMA_PAGTO FP on VE.IDNOTA = FP.IDNOTA
Abraços!
Select DISTINCT IDNOTA, DATA, VALOR_TOTAL_VENDA, COD_FORMA_PAGTO, VALOR_PAGTO from VENDAS VE
LEFT JOIN FORMA_PAGTO FP on VE.IDNOTA = FP.IDNOTA
Abraços!
GOSTEI 0
Marisiana Battistella
15/10/2014
Nesse caso você precisa utilizar a função SUM para totalizar os valores:
Não pode incluir no select os campos que são os ID dos registros nas tabelas, pois, como eles são distintos, eles irão impedir o agrupamento das informações.
select ve.data, SUM(ve.valor_total_venda) as valor_total_venda, SUM(fp.valor_pagto) as valor_pgto from vendas ve left join forma_pgto fp on ve.idnota = fp.idnota group by ve.data;
Não pode incluir no select os campos que são os ID dos registros nas tabelas, pois, como eles são distintos, eles irão impedir o agrupamento das informações.
GOSTEI 0
Sergio Santos
15/10/2014
Marisiana
A idéia no próximo passo será fazer o agrupamento, usando o SUM. A questão é que ao fazer o somatório de campo VALOR_TOTAL_VENDA, ele irá dobrar, se houverem 2 registro em FORMAS_PAGTO, e isto distorcerá o somatorio do total das Notas.
Nesse caso você precisa utilizar a função SUM para totalizar os valores:
Não pode incluir no select os campos que são os ID dos registros nas tabelas, pois, como eles são distintos, eles irão impedir o agrupamento das informações.
select ve.data, SUM(ve.valor_total_venda) as valor_total_venda, SUM(fp.valor_pagto) as valor_pgto from vendas ve left join forma_pgto fp on ve.idnota = fp.idnota group by ve.data;
Não pode incluir no select os campos que são os ID dos registros nas tabelas, pois, como eles são distintos, eles irão impedir o agrupamento das informações.
A idéia no próximo passo será fazer o agrupamento, usando o SUM. A questão é que ao fazer o somatório de campo VALOR_TOTAL_VENDA, ele irá dobrar, se houverem 2 registro em FORMAS_PAGTO, e isto distorcerá o somatorio do total das Notas.
GOSTEI 0
Marisiana Battistella
15/10/2014
Ah tá... não me dei conta disso...
Você tem que deixar o IDNOTA e incluir ele no agrupamento e, considerando que na tabela VENDA só é armazenado um registro por nota, não somar o total da venda
Logicamente o retorno deve ser esse:
Testa pra ver se tá certo...
Você tem que deixar o IDNOTA e incluir ele no agrupamento e, considerando que na tabela VENDA só é armazenado um registro por nota, não somar o total da venda
select ve.idnota, ve.data, ve.valor_total_venda as valor_total_venda, SUM(fp.valor_pagto) as valor_pgto from vendas ve left join forma_pgto fp on ve.idnota = fp.idnota group by ve.idnota, ve.data, ve.valor_total_venda;
Logicamente o retorno deve ser esse:
IDNOTA, DATA, VALOR_TOTAL_VENDA, VALOR_PAGTO 120036, 15-10-14, 100,00, 100,00 120057, 15-10-14, 310,00, 310,00
Testa pra ver se tá certo...
GOSTEI 0
Marisiana Battistella
15/10/2014
Sergio, esse último exemplo funcionou?
GOSTEI 0