 |
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qua Jan 25, 2017 4:59 pm Assunto: |
|
|
Boa tarde,
PostgreSQL? Qual versão mesmo? |
|
Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
|
Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Seg Jan 30, 2017 9:10 am Assunto: |
|
|
Bom dia,
Tem como somar o resultado pra trazer numa linha só?
Exemplo do select
Na primeira linha tem carnê e troco
Somar o total de carnê e o troco no final
Na segunda linha tem visa card, dinheiro e troco somar e ficar o total do visa card, dinheiro, e troco no final
E assim pro outros?
Meu select esta sendo montado aqui neste
Código: | WITH CTE_SUMVENDA AS
( SELECT
v.data_venda as data_venda,
CAST(v.data_venda || ' - ' || v.hora_venda AS VARCHAR(30)) as Data_Hora,
v.id as nº_pedido,
v.origem_venda,
cl.nome,
SUM(vi.qtd) AS Quantidade,
SUM(vi.qtd * vi.preco_tabela) AS Preço_Bruto,
SUM(COALESCE(v.valor_final_desconto, 0) + (vi.qtd * vi.preco_tabela) - (vi.qtd * vi.preco_venda)) AS Desconto,
SUM(vi.preco_tabela - (COALESCE(v.valor_final_desconto, 0) + (vi.qtd * vi.preco_tabela) - (vi.qtd * vi.preco_venda))) AS Total_Liquido,
SUM(vi.qtd * vi.valor_preco_custo) AS Custo,
SUM((vi.preco_tabela - (COALESCE(v.valor_final_desconto, 0) + (vi.qtd * vi.preco_tabela) - (vi.qtd * vi.preco_venda))) - (vi.qtd * vi.valor_preco_custo)) AS Lucro,
ARRAY_TO_STRING(ARRAY_AGG(vi.nome_produto), ',') AS nome_produto,
ARRAY_TO_STRING(ARRAY_AGG(vi.codigo_barra), ',') AS codigo_barra,
STRING_AGG(fp.nome_reduzido2 || ' ' || vp.valor_pgto || ' Troco ' || COALESCE(vp.vlr_troco, 0), ' ') AS pagamento
FROM venda V
INNER JOIN cliente cl ON v.id_cliente = cl.id
INNER JOIN venda_itens vi ON v.id = vi.id_venda
INNER JOIN venda_pagamento vp ON v.id = vp.id_venda
INNER JOIN forma_pagamento fp ON vp.id_forma_pgto = fp.id
WHERE v.situacao = 'C'
AND data_venda BETWEEN '25/01/2017' AND '26/01/2017'
--AND codigo_barra IN ('9515396033590', '12345678')
--AND nome_produto LIKE 'Ab%'
--AND V.ID IN (485,486)
GROUP BY 1,2,3,4,5 --data_venda, Data_Hora, nº_pedido, origem_venda, nome
)
SELECT
data_venda,
Data_Hora,
nº_pedido,
origem_venda,
CASE WHEN nº_pedido IS NULL
THEN
CASE WHEN data_venda IS NULL
THEN 'Total geral'
ELSE 'Total do dia'
END
ELSE nome
END AS nome,
CAST(CAST(SUM(Quantidade) AS NUMERIC(15,0)) AS VARCHAR(30)) as Quantidade,
CAST(TO_CHAR(SUM(Preço_Bruto),'R$ 999G999G990D99')as varchar(30)) as Preço_Bruto,
CAST(TO_CHAR(SUM(Desconto),'R$ 999G999G990D99')as varchar(30)) as Desconto,
CAST(TO_CHAR(SUM(Total_Liquido),'R$ 999G999G990D99')as varchar(30)) as Total_Liquido,
CAST(TO_CHAR(SUM(Custo),'R$ 999G999G990D99')as varchar(30)) as Custo,
CAST(TO_CHAR(SUM(Lucro),'R$ 999G999G990D99')as varchar(30)) as Lucro,
codigo_barra,
nome_produto,
pagamento,
CAST('F' as varchar(10)) as pagamento,
CAST('L' as varchar(10)) as visualizar
FROM CTE_SUMVENDA
GROUP BY GROUPING SETS
( (data_venda, Data_Hora, nº_pedido, origem_venda, nome, nome_produto, codigo_barra, pagamento), (data_venda), () )
ORDER BY data_venda, Data_Hora |
Obrigado. _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Seg Jan 30, 2017 9:41 am Assunto: |
|
|
Vamos la
Fiz uma venda que o valor final é 1.391,60 o cliente pagou com 3 x no cartao visa, 333,33 e a ultima parcela 333,34, 200,00 no boleto, e mais 200,00 no dinheiro = 1.400,00 e teve um troco de 8,40.
No meu select assim com os campos comentados
Citação: | --INNER JOIN venda_pagamento vp ON v.id = vp.id_venda
--INNER JOIN forma_pagamento fp ON vp.id_forma_pgto = fp.id |
Aparece o valor correto
Código: | WITH CTE_SUMVENDA AS
( SELECT
v.data_venda as data_venda,
CAST(v.data_venda || ' - ' || v.hora_venda AS VARCHAR(30)) as Data_Hora,
v.id as nº_pedido,
v.origem_venda,
cl.nome,
SUM(vi.qtd) AS Quantidade,
SUM(vi.qtd * vi.preco_tabela) AS Preço_Bruto,
SUM(COALESCE(v.valor_final_desconto, 0) + (vi.qtd * vi.preco_tabela) - (vi.qtd * vi.preco_venda)) AS Desconto,
SUM(vi.preco_tabela - (COALESCE(v.valor_final_desconto, 0) + (vi.qtd * vi.preco_tabela) - (vi.qtd * vi.preco_venda))) AS Total_Liquido,
SUM(vi.qtd * vi.valor_preco_custo) AS Custo,
SUM((vi.preco_tabela - (COALESCE(v.valor_final_desconto, 0) + (vi.qtd * vi.preco_tabela) - (vi.qtd * vi.preco_venda))) - (vi.qtd * vi.valor_preco_custo)) AS Lucro,
ARRAY_TO_STRING(ARRAY_AGG(vi.nome_produto), ',') AS nome_produto,
ARRAY_TO_STRING(ARRAY_AGG(vi.codigo_barra), ',') AS codigo_barra
--STRING_AGG(fp.nome_reduzido2 || ' ' || vp.valor_pgto || ' Troco ' || COALESCE(vp.vlr_troco, 0), ' ') AS pagamento
FROM venda V
INNER JOIN cliente cl ON v.id_cliente = cl.id
INNER JOIN venda_itens vi ON v.id = vi.id_venda
--INNER JOIN venda_pagamento vp ON v.id = vp.id_venda
--INNER JOIN forma_pagamento fp ON vp.id_forma_pgto = fp.id
WHERE v.situacao = 'C'
AND data_venda BETWEEN '30/01/2017' AND '30/01/2017'
--AND codigo_barra IN ('9515396033590', '12345678')
--AND nome_produto LIKE 'Ab%'
--AND V.ID IN (485,486)
GROUP BY 1,2,3,4,5 --data_venda, Data_Hora, nº_pedido, origem_venda, nome
)
SELECT
data_venda,
Data_Hora,
nº_pedido,
origem_venda,
CASE WHEN nº_pedido IS NULL
THEN
CASE WHEN data_venda IS NULL
THEN 'Total geral'
ELSE 'Total do dia'
END
ELSE nome
END AS nome,
CAST(CAST(SUM(Quantidade) AS NUMERIC(15,0)) AS VARCHAR(30)) as Quantidade,
CAST(TO_CHAR(SUM(Preço_Bruto),'R$ 999G999G990D99')as varchar(30)) as Preço_Bruto,
CAST(TO_CHAR(SUM(Desconto),'R$ 999G999G990D99')as varchar(30)) as Desconto,
CAST(TO_CHAR(SUM(Total_Liquido),'R$ 999G999G990D99')as varchar(30)) as Total_Liquido,
CAST(TO_CHAR(SUM(Custo),'R$ 999G999G990D99')as varchar(30)) as Custo,
CAST(TO_CHAR(SUM(Lucro),'R$ 999G999G990D99')as varchar(30)) as Lucro,
codigo_barra,
nome_produto,
--pagamento,
CAST('F' as varchar(10)) as pagamento,
CAST('L' as varchar(10)) as visualizar
FROM CTE_SUMVENDA
GROUP BY GROUPING SETS
( (data_venda, Data_Hora, nº_pedido, origem_venda, nome, nome_produto, codigo_barra, pagamento), (data_venda), () )
ORDER BY data_venda, Data_Hora |
Mais preciso trazer estas informações que passei acima no select em um campo assim
Citação: | cartao 1.000,00 Boleto 200,00 Dinheiro 200,00 Troco 8,40 |
Obrigado. _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Seg Jan 30, 2017 10:04 am Assunto: |
|
|
Quando executo este select aqui
Código: | SELECT
SUM(vp.valor_pgto),
SUM(vp.vlr_troco),
STRING_AGG(fp.nome_reduzido2 || ' ' || vp.valor_pgto || ' Troco ' || COALESCE(vp.vlr_troco, 0), ' ') AS pagamento
FROM venda_pagamento vp
INNER JOIN forma_pagamento fp ON vp.id_forma_pgto = fp.id
WHERE Vp.ID_venda = 490 |
Me traz o valor certo da soma, apenas o string_agg que preciso arrumar
Ja quando faço buscando a soma da tabela vendas_itens
Código: | SELECT
SUM(vi.qtd * vi.preco_tabela) AS Preço_Bruto,
SUM(vp.valor_pgto),
SUM(vp.vlr_troco),
STRING_AGG(fp.nome_reduzido2 || ' ' || vp.valor_pgto || ' Troco ' || COALESCE(vp.vlr_troco, 0), ' ') AS pagamento
FROM venda v
INNER JOIN venda_itens vi ON v.id = vi.id_venda
INNER JOIN venda_pagamento vp ON v.id = vp.id_venda
INNER JOIN forma_pagamento fp ON vp.id_forma_pgto = fp.id
WHERE VP.ID_VENDA = 490 |
a soma Preço_Bruto aumenta 5 X o valor (acho que é porque na tabela venda_pagamento foi executado 5 x os pagamentos.
e os campos
Código: | SUM(vp.valor_pgto),
SUM(vp.vlr_troco), |
Dobram o valor _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Seg Jan 30, 2017 10:22 am Assunto: |
|
|
Se conseguir trazer o resultado assim:
Citação: | cartao 1.000,00 Boleto 200,00 Dinheiro 200,00 Troco 8,40 |
Desta venda:
Citação: | Fiz uma venda que o valor final é 1.391,60 o cliente pagou com 3 x no cartao visa, 333,33 e a ultima parcela 333,34, 200,00 no boleto, e mais 200,00 no dinheiro = 1.400,00 e teve um troco de 8,40. |
neste select aqui
Código: | SELECT
SUM(vp.valor_pgto),
SUM(vp.vlr_troco),
STRING_AGG(fp.nome_reduzido2 || ' ' || vp.valor_pgto || ' Troco ' || COALESCE(vp.vlr_troco, 0), ' ') AS pagamento
FROM venda_pagamento vp
INNER JOIN forma_pagamento fp ON vp.id_forma_pgto = fp.id
WHERE Vp.ID_venda = 490 |
Ja resolve _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Seg Jan 30, 2017 10:36 am Assunto: |
|
|
Como você está retornando somente um valor da tabela de itens, acho que seria mais simples utilizar uma subquery para obter esse valor, sendo que nesse caso essa tabela seria removida do Join, o que deve evitar o problema som os outros valores.
Espero que ajude |
|
Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Seg Jan 30, 2017 11:05 am Assunto: |
|
|
Experimente dessa forma:
Código: | SELECT
(select SUM(vi.qtd * vi.preco_tabela)
from venda_itens vi
where v.id = vi.id_venda) AS Preço_Bruto,
SUM(vp.valor_pgto),
SUM(vp.vlr_troco),
STRING_AGG(fp.nome_reduzido2 || ' ' || vp.valor_pgto || ' Troco ' || COALESCE(vp.vlr_troco, 0), ' ') AS pagamento
FROM venda v
INNER JOIN venda_pagamento vp ON v.id = vp.id_venda
INNER JOIN forma_pagamento fp ON vp.id_forma_pgto = fp.id
WHERE v.id = 490 |
obs: talvez seja necessário adicionar o Group By no final com o campo v.id
Espero que ajude |
|
Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Seg Jan 30, 2017 12:29 pm Assunto: |
|
|
Na verdade Imex, o que eu preciso agora é mostrar apenas o campo pagamento mais não desta forma aqui
Na venda esta assim
Citação: | Fiz uma venda que o valor final é 1.391,60 o cliente pagou com 3 x no cartao visa, 333,33 e a ultima parcela 333,34, 200,00 no boleto, e mais 200,00 no dinheiro = 1.400,00 e teve um troco de 8,40. |
O que eu preciso é no campo pagamento (nem precisa ter estes dois campos somados ai no select), mais o resultado do campo pagamento deve ficar em uma linha só assim
Citação: | DINHEIRO 200,00 (SE TIVESSE MAIS TERIA QUE SOMAR O VALOR)
VISA CARD 1.000,00 (FOI SOMADO O VALOR)
BOLETO 200,00 (SE TIVESSE MAIS PAGAMENTO COM BOLETO SOMAR TAMBEM)
TROCO 8,40 |
_________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Seg Jan 30, 2017 1:57 pm Assunto: |
|
|
adriano_servitec escreveu: | Na verdade Imex, o que eu preciso agora é mostrar apenas o campo pagamento mais não desta forma aqui
Na venda esta assim
Citação: | Fiz uma venda que o valor final é 1.391,60 o cliente pagou com 3 x no cartao visa, 333,33 e a ultima parcela 333,34, 200,00 no boleto, e mais 200,00 no dinheiro = 1.400,00 e teve um troco de 8,40. |
O que eu preciso é no campo pagamento (nem precisa ter estes dois campos somados ai no select), mais o resultado do campo pagamento deve ficar em uma linha só assim
Citação: | DINHEIRO 200,00 (SE TIVESSE MAIS TERIA QUE SOMAR O VALOR)
VISA CARD 1.000,00 (FOI SOMADO O VALOR)
BOLETO 200,00 (SE TIVESSE MAIS PAGAMENTO COM BOLETO SOMAR TAMBEM)
TROCO 8,40 |
|
Nem precisa trazer o resultado em uma unica linha, porém gostaria de trazer o resultado somado com o vlr_troco no final (ultima linha)
Algo + ou - assim
Código: | SELECT
fp.nome_reduzido2,
CAST(TO_CHAR(sum(vp.valor_pgto), 'R$ 999G999G990D99')as varchar(30)) as valor_pgto,
CAST(TO_CHAR(sum(vp.vlr_troco), 'R$ 999G999G990D99')as varchar(30)) as vlr_troco
FROM venda_pagamento vp
INNER JOIN forma_pagamento fp on vp.id_forma_pgto = fp.id
INNER JOIN venda v on vp.id_venda = v.id
WHERE v.data_venda BETWEEN '30/01/2017' AND '30/01/2017'
AND v.situacao = 'C'
GROUP BY 1 ORDER BY 2 DESC |
Só que ai tenho duas colunas, quero apenas uma com os dois campos.
Obrigado. _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|