ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Como faz a soma total de um select mesmo?

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Seg Jun 19, 2017 5:20 pm    Assunto: Como faz a soma total de um select mesmo? Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Seg Jun 19, 2017 8:39 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Ter Jun 20, 2017 9:04 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Ter Jun 20, 2017 2:56 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Ter Jun 20, 2017 3:27 pm    Assunto: Responder com Citação

Mesma coisa amigo.
_________________
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
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Ter Jun 20, 2017 3:41 pm    Assunto: Responder com Citação

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:

Código:
'[' as CF


Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Ter Jun 20, 2017 3:54 pm    Assunto: Responder com Citação

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:

Código:
'[' as CF


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
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Ter Jun 20, 2017 4:38 pm    Assunto: Responder com Citação

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:

Código:
'[' as CF


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
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Ter Jun 20, 2017 5:07 pm    Assunto: Responder com Citação

Se for na aplicação acredito que o total geral vai estar sempre no último registro da query.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Qua Jun 21, 2017 9:29 am    Assunto: Responder com Citação

imex escreveu:
Se for na aplicação acredito que o total geral vai estar sempre no último registro da query.
Verdade, faz sentido.
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
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB