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 

Erro na soma sql firebird 2.5?
Ir à página Anterior  1, 2
 
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: Qui Abr 04, 2019 3:28 pm    Assunto: Responder com Citação

Andei fazendo assim
Código:
    SELECT
           COALESCE(SUM( vi.quantidade ),0) as QUANTIDADE,
           COALESCE(SUM( (
                          SELECT SUM(vp.valor_total)
                            FROM vendas_pagamento vp
                           WHERE vp.codigo = v.codigo
                             AND vp.anulado IS NULL
                           )
                      ),0) AS VALOR_FATURADO,
           COALESCE(SUM( vi.valor_rateio_titular ),0) as VALOR_RATEIO_TITULAR,
           COALESCE(SUM( vi.valor_rateio_assistente ),0) as VALOR_RATEIO_ASSISTENTE,
           COALESCE(SUM( vi.custo_com_aquisicao ),0) as CUSTO_COM_AQUISICAO,
           COALESCE(SUM( vi.custo_com_produtos_total ),0) as CUSTO_COM_PRODUTOS_TOTAL,
           COALESCE(SUM( vi.custo_operacional ),0) as CUSTO_OPERACIONAL,
           COALESCE(SUM( (
                          SELECT SUM(vp.valor_parcela)
                            FROM vendas_pagamento vp
                           WHERE vp.codigo = v.codigo
                             AND vp.anulado IS NULL
                           )
                      ),0) AS VALOR_PARCELA
       FROM VENDAS_ITENS VI
 INNER JOIN VENDAS V ON V.CODIGO = VI.CODIGO
      WHERE V.CODIGO = VI.CODIGO and
            V.DATA_HORA BETWEEN :DATA_INI AND :DATA_FIN AND
            VI.CODIGO_TITULAR = :COD_PROFISSIONAL AND
            VI.CODIGO_PEDIDO = :COD_PEDIDO AND
            VI.TIPO_PEDIDO = :TIPO AND
            VI.ITEM_CANCELADO = 'Nao' AND
            VI.TIPO IS NULL


Mas não sei se deu boa, pelo menos não duplicou. porém campos de tabelas diferentes e não conheço a regra deste software se vai dar boa, no meu exemplo deu, não sei em produção.
_________________
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: Qui Abr 04, 2019 3:46 pm    Assunto: Responder com Citação

adriano_servitec escreveu:
Andei fazendo assim
Código:
    SELECT
           COALESCE(SUM( vi.quantidade ),0) as QUANTIDADE,
           COALESCE(SUM( (
                          SELECT SUM(vp.valor_total)
                            FROM vendas_pagamento vp
                           WHERE vp.codigo = v.codigo
                             AND vp.anulado IS NULL
                           )
                      ),0) AS VALOR_FATURADO,
           COALESCE(SUM( vi.valor_rateio_titular ),0) as VALOR_RATEIO_TITULAR,
           COALESCE(SUM( vi.valor_rateio_assistente ),0) as VALOR_RATEIO_ASSISTENTE,
           COALESCE(SUM( vi.custo_com_aquisicao ),0) as CUSTO_COM_AQUISICAO,
           COALESCE(SUM( vi.custo_com_produtos_total ),0) as CUSTO_COM_PRODUTOS_TOTAL,
           COALESCE(SUM( vi.custo_operacional ),0) as CUSTO_OPERACIONAL,
           COALESCE(SUM( (
                          SELECT SUM(vp.valor_parcela)
                            FROM vendas_pagamento vp
                           WHERE vp.codigo = v.codigo
                             AND vp.anulado IS NULL
                           )
                      ),0) AS VALOR_PARCELA
       FROM VENDAS_ITENS VI
 INNER JOIN VENDAS V ON V.CODIGO = VI.CODIGO
      WHERE V.CODIGO = VI.CODIGO and
            V.DATA_HORA BETWEEN :DATA_INI AND :DATA_FIN AND
            VI.CODIGO_TITULAR = :COD_PROFISSIONAL AND
            VI.CODIGO_PEDIDO = :COD_PEDIDO AND
            VI.TIPO_PEDIDO = :TIPO AND
            VI.ITEM_CANCELADO = 'Nao' AND
            VI.TIPO IS NULL


Mas não sei se deu boa, pelo menos não duplicou. porém campos de tabelas diferentes e não conheço a regra deste software se vai dar boa, no meu exemplo deu, não sei em produção.

Ja descartei este select.
Não rolou não, da diferença no 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
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


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

MensagemEnviada: Qui Abr 04, 2019 3:49 pm    Assunto: Responder com Citação

Experimente fazer uns testes com a query abaixo:

Código:
with CTE_VENDAS as
(
    SELECT
        V.CODIGO,
        SUM(vp.valor_parcela) AS VALOR_PARCELA,
        SUM(vp.valor_parcela * COALESCE(vp.desconto_forma_pagamento, 0)) / SUM(vp.valor_parcela) AS DESCONTO_FORMA_PAGAMENTO
    FROM VENDAS V
    INNER JOIN vendas_pagamento vp
        ON vp.codigo = v.codigo AND
           vp.anulado is null
    WHERE
        V.DATA_HORA BETWEEN :DATA_INI AND :DATA_FIN
    GROUP BY
        V.CODIGO
)

    SELECT
           COALESCE(SUM( vi.quantidade ),0) as QUANTIDADE,
           COALESCE(SUM( vi.preco_total_desc_ajust - (vi.preco_total_desc_ajust * v.desconto_forma_pagamento / 100) ), 0) AS VALOR_FATURADO,
           COALESCE(SUM( vi.valor_rateio_titular ),0) as VALOR_RATEIO_TITULAR,
           COALESCE(SUM( vi.valor_rateio_assistente ),0) as VALOR_RATEIO_ASSISTENTE,
           COALESCE(SUM( vi.custo_com_aquisicao ),0) as CUSTO_COM_AQUISICAO,
           COALESCE(SUM( vi.custo_com_produtos_total ),0) as CUSTO_COM_PRODUTOS_TOTAL,
           COALESCE(SUM( vi.custo_operacional ),0) as CUSTO_OPERACIONAL,
           COALESCE(SUM( v.valor_parcela ),0) AS VALOR_PARCELA
       FROM CTE_VENDAS AS V
 INNER JOIN VENDAS_ITENS VI ON VI.CODIGO = V.CODIGO
      WHERE VI.CODIGO_TITULAR = :COD_PROFISSIONAL AND
            VI.CODIGO_PEDIDO = :COD_PEDIDO AND
            VI.TIPO_PEDIDO = :TIPO AND
            VI.ITEM_CANCELADO = 'Nao' AND
            VI.TIPO IS NULL


Na CTE deverá ser obtida a média de desconto da venda conforme o pagamento, para depois somar os itens aplicando o desconto.

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: Qui Abr 04, 2019 4:29 pm    Assunto: Responder com Citação

Imex, parece que desta forma deu certo.

Obrigado por ajudar 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
adriano_servitec
Colaborador
Colaborador


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

MensagemEnviada: Qui Abr 04, 2019 5:04 pm    Assunto: Responder com Citação

Uma duvida neste caso aqui este valor não seria o valor_sem_desconto_ajuste no lugar do valor_parcela?

No final o meu pagamento ficou de 60,00 paguei 46,00 no caixa
Mais assim me mostra nesta coluna o valor 49,304, de onde pegou isso?

Imagem da tabela vendas_pagamento e os campos

_________________
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: Qui Abr 04, 2019 5:07 pm    Assunto: Responder com Citação

adriano_servitec escreveu:
Uma duvida neste caso aqui este valor não seria o valor_sem_desconto_ajuste no lugar do valor_parcela?

No final o meu pagamento ficou de 60,00 paguei 46,00 no caixa
Mais assim me mostra nesta coluna o valor 49,304, de onde pegou isso?

Imagem da tabela vendas_pagamento e os campos


Alias este primeiro campo nem sei o que é, tudo deu 20,00

Mais na real o valor do produto é 60,00 com as formas de pagamento e seus indices no final paguei 46,00
_________________
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: Qui Abr 04, 2019 5:19 pm    Assunto: Responder com Citação

Fiz mais uma venda
Forma de pagamentos
6-cartão débito 50% desconto
4-cartão crédito 20% desconto
1-dinheiro - 0% desconto

Valor do produto 6,00
venda
10 X 6,00 = 60,00

Pagamento da venda
6-cartão débito 10,00
Meu finaliza venda me diz que falta 40,00
4-cartão crédito 10,00
Meu finaliza venda me diz que falta 27,50
1-dinheiro - 27,50

Total pago desta venda foi 47,50

No select diz que ficou 51,158
_________________
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: Qui Abr 04, 2019 5:28 pm    Assunto: Responder com Citação

Não sei, mais parece ser assim Imex
Código:
with CTE_VENDAS as
    (
    SELECT
        V.CODIGO,
        SUM(vp.valor_sem_desconto_ajuste) AS VALOR_PARCELA,
        SUM(vp.valor_sem_desconto_ajuste * COALESCE(vp.desconto_forma_pagamento, 0)) / SUM(vp.valor_sem_desconto_ajuste) AS DESCONTO_FORMA_PAGAMENTO
    FROM VENDAS V
    INNER JOIN vendas_pagamento vp
        ON vp.codigo = v.codigo AND
           vp.anulado is null
    WHERE
        V.DATA_HORA BETWEEN :DATA_INI AND :DATA_FIN
    GROUP BY
        V.CODIGO
    )


Não tenho certeza, vou fazer testes ainda.
_________________
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: Sex Abr 05, 2019 9:22 am    Assunto: Responder com Citação

Dei uma alterada, acho que assim é o certo que percebi analisando melhor
Código:
with CTE_VENDAS as
    (
    SELECT
        V.CODIGO,
        SUM(vp.valor_parcela) AS VALOR_PARCELA,
        SUM(vp.valor_sem_desconto_ajuste * COALESCE(vp.desconto_forma_pagamento, 0)) / SUM(vp.valor_sem_desconto_ajuste) AS DESCONTO_FORMA_PAGAMENTO
    FROM VENDAS V
    INNER JOIN vendas_pagamento vp
        ON vp.codigo = v.codigo AND
           vp.anulado is null
    WHERE
        V.DATA_HORA BETWEEN :DATA_INI AND :DATA_FIN
    GROUP BY
        V.CODIGO
    )


Muito obrigado Imex. Acho que assim 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
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
Ir à página Anterior  1, 2
Página 2 de 2

 
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