 |
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
|
Enviada: Seg Jun 19, 2017 5:20 pm Assunto: Como faz a soma total de um select mesmo? |
|
|
Preciso da soma total no select deste código em postgres
| Código: | WITH CTE_ProdutosServicos as
(SELECT
vi.id codigo,
vi.nome_produto nome_produto,
cast(vi.qtd || '|' || u.sigla as varchar(20)) as vqtd,
vi.qtd as qtd,
vi.preco_tabela as preco_unitario,
case when vi.desconto = 'S' then
(vi.preco_venda) - (vi.qtd * vi.preco_tabela) else
0 end as desconto_item,
vi.cfop, '[' as CF
FROM venda_itens vi
INNER JOIN unidade u on vi.id_unidade = u.id
WHERE vi.id_venda = 1000000839
ORDER BY vi.id )
SELECT
codigo,
nome_produto,
qtd,
cast(to_char(preco_unitario, 'L9G999G990D99') as varchar(20)) as preco_unitario,
cast(to_char(desconto_item, 'L9G999G990D99') as varchar(20)) as total_desconto,
cast(to_char(((preco_unitario * qtd) + desconto_item), 'L9G999G990D99') as varchar(20)) as subtotal,
--SUM(desconto_item) as totalDesc,
cfop,
cf
FROM CTE_ProdutosServicos
--GROUP BY grouping sets
-- ( ( codigo, nome_produto, qtd, preco_unitario, total_desconto, subtotal, CFOP, CF ), () ) |
Preciso trazer o total desconto e subtotal neste query aqui
 _________________ 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 Jun 19, 2017 8:39 pm Assunto: |
|
|
Boa noite,
Experimente dessa forma para ver se funciona:
| Código: | WITH CTE_ProdutosServicos as
(SELECT
vi.id codigo,
vi.nome_produto nome_produto,
cast(vi.qtd || '|' || u.sigla as varchar(20)) as vqtd,
vi.qtd as qtd,
vi.preco_tabela as preco_unitario,
case when vi.desconto = 'S' then
(vi.preco_venda) - (vi.qtd * vi.preco_tabela) else
0 end as desconto_item,
vi.cfop, '[' as CF
FROM venda_itens vi
INNER JOIN unidade u on vi.id_unidade = u.id
WHERE vi.id_venda = 1000000839
--ORDER BY vi.id
)
SELECT
codigo,
nome_produto,
qtd,
cast(to_char(preco_unitario, 'L9G999G990D99') as varchar(20)) as preco_unitario,
cast(to_char(sum(desconto_item), 'L9G999G990D99') as varchar(20)) as total_desconto,
cast(to_char(sum(preco_unitario * qtd + desconto_item), 'L9G999G990D99') as varchar(20)) as subtotal,
--SUM(desconto_item) as totalDesc,
cfop,
cf
FROM CTE_ProdutosServicos
GROUP BY grouping sets
( ( codigo, nome_produto, qtd, preco_unitario, total_desconto, subtotal, CFOP, CF ), () ) |
Espero que ajude
_________________
Assinatura: http://www.imoveisemexposicao.com.br/imoveis-venda-guarulhos!gopouva-residencial-casa |
|
| Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Ter Jun 20, 2017 9:04 am Assunto: |
|
|
Olá Imex bom dia, seguindo seu exemplo
| Código: | WITH CTE_ProdutosServicos as
(SELECT
vi.id codigo,
vi.nome_produto nome_produto,
cast(vi.qtd || '|' || u.sigla as varchar(20)) as vqtd,
vi.qtd as qtd,
vi.preco_tabela as preco_unitario,
case when vi.desconto = 'S' then
(vi.preco_venda) - (vi.qtd * vi.preco_tabela) else
0 end as desconto_item,
vi.cfop, '[' as CF
FROM venda_itens vi
INNER JOIN unidade u on vi.id_unidade = u.id
WHERE vi.id_venda = 1000000839
--ORDER BY vi.id
)
SELECT
codigo,
nome_produto,
qtd,
cast(to_char(preco_unitario, 'L9G999G990D99') as varchar(20)) as preco_unitario,
cast(to_char(sum(desconto_item), 'L9G999G990D99') as varchar(20)) as total_desconto,
cast(to_char(sum(preco_unitario * qtd + desconto_item), 'L9G999G990D99') as varchar(20)) as subtotal,
--SUM(desconto_item) as totalDesc,
cfop,
cf
FROM CTE_ProdutosServicos
GROUP BY grouping sets
( ( codigo, nome_produto, qtd, preco_unitario, CFOP, CF ), () ) |
Acusa um erro que ja tinha acontecido aqui comigo
| Citação: | ERROR: failed to find conversion function from unknown to text
********** Error **********
ERROR: failed to find conversion function from unknown to text
SQL state: XX000 |
Parece que esta como texto isso e não faz a soma, não sei ainda o que significa. _________________ 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: Ter Jun 20, 2017 2:56 pm Assunto: |
|
|
Experimente fazer uns testes removendo o Cast que está antes do Sum:
| Código: | WITH CTE_ProdutosServicos as
(SELECT
vi.id codigo,
vi.nome_produto nome_produto,
cast(vi.qtd || '|' || u.sigla as varchar(20)) as vqtd,
vi.qtd as qtd,
vi.preco_tabela as preco_unitario,
case when vi.desconto = 'S' then
(vi.preco_venda) - (vi.qtd * vi.preco_tabela) else
0 end as desconto_item,
vi.cfop, '[' as CF
FROM venda_itens vi
INNER JOIN unidade u on vi.id_unidade = u.id
WHERE vi.id_venda = 1000000839
--ORDER BY vi.id
)
SELECT
codigo,
nome_produto,
qtd,
cast(to_char(preco_unitario, 'L9G999G990D99') as varchar(20)) as preco_unitario,
sum(desconto_item) as total_desconto,
sum(preco_unitario * qtd + desconto_item) as subtotal,
--SUM(desconto_item) as totalDesc,
cfop,
cf
FROM CTE_ProdutosServicos
GROUP BY grouping sets
( ( codigo, nome_produto, qtd, preco_unitario, CFOP, CF ), () ) |
Se funcionar dessa forma e o Cast for mesmo necessário, acho que vai ser necessário colocar essa parte com o Group By dentro de uma segunda CTE e depois acrescentar uma query no trecho final onde seria feito o Cast.
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: Ter Jun 20, 2017 3:41 pm Assunto: |
|
|
Não tenho nenhuma experiência com o Postgre, mas desconfio que o problema pode estar na linha abaixo, onde talvez seja necessário um Cast no campo vi.qtd (que presumo seja numérico) para varchar antes de concatenar:
| Código: | | cast(vi.qtd || '|' || u.sigla as varchar(20)) as vqtd, |
Ou na linha abaixo onde talvez seja necessário um Cast para definir o tipo de dados:
Espero que ajude |
|
| Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Ter Jun 20, 2017 3:54 pm Assunto: |
|
|
| imex escreveu: | Não tenho nenhuma experiência com o Postgre, mas desconfio que o problema pode estar na linha abaixo, onde talvez seja necessário um Cast no campo vi.qtd (que presumo seja numérico) para varchar antes de concatenar:
| Código: | | cast(vi.qtd || '|' || u.sigla as varchar(20)) as vqtd, |
Ou na linha abaixo onde talvez seja necessário um Cast para definir o tipo de dados:
Espero que ajude |
Ajudou sim Imex, era no campo CF o cast
| Código: | WITH CTE_ProdutosServicos as
(SELECT
vi.id codigo,
vi.nome_produto nome_produto,
cast(vi.qtd || '|' || u.sigla as varchar(20)) as vqtd,
vi.qtd as qtd,
vi.preco_tabela as preco_unitario,
case when vi.desconto = 'S' then
(vi.preco_venda) - (vi.qtd * vi.preco_tabela) else
0 end as desconto_item,
vi.cfop,
cast('[' as varchar(1)) as CF
FROM venda_itens vi
INNER JOIN unidade u on vi.id_unidade = u.id
WHERE vi.id_venda = 1000000839
--ORDER BY vi.id
)
SELECT
codigo,
nome_produto,
qtd,
cast(to_char(preco_unitario, 'L9G999G990D99') as varchar(20)) as preco_unitario,
sum(desconto_item) as total_desconto,
sum(preco_unitario * qtd + desconto_item) as subtotal,
--SUM(desconto_item) as totalDesc,
cfop
cf
FROM CTE_ProdutosServicos
GROUP BY grouping sets
( ( codigo, nome_produto, qtd, preco_unitario, CFOP, cf ), () ) |
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: Ter Jun 20, 2017 4:38 pm Assunto: |
|
|
| adriano_servitec escreveu: | | imex escreveu: | Não tenho nenhuma experiência com o Postgre, mas desconfio que o problema pode estar na linha abaixo, onde talvez seja necessário um Cast no campo vi.qtd (que presumo seja numérico) para varchar antes de concatenar:
| Código: | | cast(vi.qtd || '|' || u.sigla as varchar(20)) as vqtd, |
Ou na linha abaixo onde talvez seja necessário um Cast para definir o tipo de dados:
Espero que ajude |
Ajudou sim Imex, era no campo CF o cast
| Código: | WITH CTE_ProdutosServicos as
(SELECT
vi.id codigo,
vi.nome_produto nome_produto,
cast(vi.qtd || '|' || u.sigla as varchar(20)) as vqtd,
vi.qtd as qtd,
vi.preco_tabela as preco_unitario,
case when vi.desconto = 'S' then
(vi.preco_venda) - (vi.qtd * vi.preco_tabela) else
0 end as desconto_item,
vi.cfop,
cast('[' as varchar(1)) as CF
FROM venda_itens vi
INNER JOIN unidade u on vi.id_unidade = u.id
WHERE vi.id_venda = 1000000839
--ORDER BY vi.id
)
SELECT
codigo,
nome_produto,
qtd,
cast(to_char(preco_unitario, 'L9G999G990D99') as varchar(20)) as preco_unitario,
sum(desconto_item) as total_desconto,
sum(preco_unitario * qtd + desconto_item) as subtotal,
--SUM(desconto_item) as totalDesc,
cfop
cf
FROM CTE_ProdutosServicos
GROUP BY grouping sets
( ( codigo, nome_produto, qtd, preco_unitario, CFOP, cf ), () ) |
Obrigado. |
Sabe dizer como pego a soma total dos campos depois, quero passar para uma variavel _________________ 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: Ter Jun 20, 2017 5:07 pm Assunto: |
|
|
| Se for na aplicação acredito que o total geral vai estar sempre no último registro da query. |
|
| Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
| Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|