none
Somar Valores RRS feed

  • Pergunta

  • Bom dia, por gentileza estou tentando fazer a soma dos valores abaixo na imagem e não estou conseguindo, se alguém puder ajudar.

    Muito obrigado.

    select 
    (A.valor * (select porcentagem_profissional from tbl_Comissao where codigo_funcionario = A.codigo_profissional and codigo_servico = A.codigo_servico )/100) * (E.porcentagem_ajudante/100) totalajudante  
     from tbl_ComandaServico A  
     inner join tbl_AberturaCaixa B  
     on A.codigo_abertura_caixa = B.codigo  
     inner join tbl_AjudanteServico C  
     on A.codigo = C.Codigo_Comanda_Servico  
     inner join tbl_Servico D  
     on A.codigo_servico = D.codigo  
     inner join tbl_Comissao E  
     on E.codigo_funcionario = c.Codigo_Ajudante  
     and A.codigo_servico = E.codigo_servico  
     where convert(date,B.data) between '2019-10-25' and '2019-10-25' 
     and B.codigo_empresa = 1
     and C.Codigo_Ajudante = 30077  


    • Editado _Manigold_ sábado, 26 de outubro de 2019 13:24
    sábado, 26 de outubro de 2019 13:23

Respostas

  • Deleted
    • Marcado como Resposta _Manigold_ sábado, 26 de outubro de 2019 18:00
    sábado, 26 de outubro de 2019 14:54
  • _Manigold_

    Seria possível compartilhar melhor a imagem, os valores estão bem pequenos,cVocê esta fazendo uma multiplicação.

    Perguntas:

    1. Os resultados que estão sendo retornado estão incorretos?
    2. Você já analisou as condições que estão sendo impostas se elas estão corretas?
    3. Já analisou e validou se as condições aplicadas nas Junções e também na cláusula Where estão corretas?

    Não entendi o motiva de você estar utilizando uma Subquery para realizar a multiplicação, sendo que as tabelas envolvidas neste cálculo também estão declaradas e relacionadas no Select principal.

    Veja se esta alteração tras o resultado que você deseja:

    Select ((A.valor * E.porcentagem_profissional/100) * (E.porcentagem_ajudante/100)) As Totalajudante  
    From tbl_ComandaServico A Inner join tbl_AberturaCaixa B
                               On A.codigo_abertura_caixa = B.codigo  
                              Inner join tbl_AjudanteServico C  
                               On A.codigo = C.Codigo_Comanda_Servico  
                              Inner join tbl_Servico D  
                               On A.codigo_servico = D.codigo  
                              Inner join tbl_Comissao E  
                               On E.codigo_funcionario = C.Codigo_Ajudante  
                               And A.codigo_servico = E.codigo_servico  
     Where Convert(date,B.data) Between '2019-10-25' And '2019-10-25' 
     And B.codigo_empresa = 1
     And C.Codigo_Ajudante = 30077 

    Este é somente um exemplo, um esboço, não teste, poderá conter erros.

    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    • Marcado como Resposta _Manigold_ sábado, 26 de outubro de 2019 18:00
    sábado, 26 de outubro de 2019 14:21
  • Bom dia,

    Manigold, não sei se entendi corretamente mas experimente acrescentar um Sum depois do Select para ver se é obtido o resultado esperado.

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    Gapimex,

    Então, pensei em sugerir o uso da função SUM(), mas como ele esta fazendo uma multiplicação e dividindo por 100, talvez ele possa estar querendo obter valores percentuais.



    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    • Marcado como Resposta _Manigold_ sábado, 26 de outubro de 2019 18:00
    sábado, 26 de outubro de 2019 14:48
  • Boa tarde, gostaria de somar a coluna.

    Obrigado.

    • Marcado como Resposta _Manigold_ sábado, 26 de outubro de 2019 18:00
    sábado, 26 de outubro de 2019 17:23

Todas as Respostas

  • _Manigold_

    Seria possível compartilhar melhor a imagem, os valores estão bem pequenos,cVocê esta fazendo uma multiplicação.

    Perguntas:

    1. Os resultados que estão sendo retornado estão incorretos?
    2. Você já analisou as condições que estão sendo impostas se elas estão corretas?
    3. Já analisou e validou se as condições aplicadas nas Junções e também na cláusula Where estão corretas?

    Não entendi o motiva de você estar utilizando uma Subquery para realizar a multiplicação, sendo que as tabelas envolvidas neste cálculo também estão declaradas e relacionadas no Select principal.

    Veja se esta alteração tras o resultado que você deseja:

    Select ((A.valor * E.porcentagem_profissional/100) * (E.porcentagem_ajudante/100)) As Totalajudante  
    From tbl_ComandaServico A Inner join tbl_AberturaCaixa B
                               On A.codigo_abertura_caixa = B.codigo  
                              Inner join tbl_AjudanteServico C  
                               On A.codigo = C.Codigo_Comanda_Servico  
                              Inner join tbl_Servico D  
                               On A.codigo_servico = D.codigo  
                              Inner join tbl_Comissao E  
                               On E.codigo_funcionario = C.Codigo_Ajudante  
                               And A.codigo_servico = E.codigo_servico  
     Where Convert(date,B.data) Between '2019-10-25' And '2019-10-25' 
     And B.codigo_empresa = 1
     And C.Codigo_Ajudante = 30077 

    Este é somente um exemplo, um esboço, não teste, poderá conter erros.

    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    • Marcado como Resposta _Manigold_ sábado, 26 de outubro de 2019 18:00
    sábado, 26 de outubro de 2019 14:21
  • Bom dia,

    Manigold, não sei se entendi corretamente mas experimente acrescentar um Sum depois do Select para ver se é obtido o resultado esperado.

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    sábado, 26 de outubro de 2019 14:38
  • Bom dia,

    Manigold, não sei se entendi corretamente mas experimente acrescentar um Sum depois do Select para ver se é obtido o resultado esperado.

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    Gapimex,

    Então, pensei em sugerir o uso da função SUM(), mas como ele esta fazendo uma multiplicação e dividindo por 100, talvez ele possa estar querendo obter valores percentuais.



    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    • Marcado como Resposta _Manigold_ sábado, 26 de outubro de 2019 18:00
    sábado, 26 de outubro de 2019 14:48
  • Boa tarde amigo desculpe pela demora do retorno fiz o teste o mesmo retorna a seguinte mensagem:

    Cannot perform an aggregate function on an expression containing an aggregate or a subquery.

    sábado, 26 de outubro de 2019 17:23
  • Boa tarde, gostaria de somar a coluna.

    Obrigado.

    • Marcado como Resposta _Manigold_ sábado, 26 de outubro de 2019 18:00
    sábado, 26 de outubro de 2019 17:23
  • Ola amigo, estou querendo somar a coluna os itens informados acima esta tudo ok, mas nao estou conseguindo somar:

    https://social.msdn.microsoft.com/Forums/getfile/1497284

    sábado, 26 de outubro de 2019 17:28
  • Bom dia, por gentileza estou tentando fazer a soma dos valores abaixo na imagem e não estou conseguindo, se alguém puder ajudar.

    Muito obrigado.

    select 
    (A.valor * (select porcentagem_profissional from tbl_Comissao where codigo_funcionario = A.codigo_profissional and codigo_servico = A.codigo_servico )/100) * (E.porcentagem_ajudante/100) totalajudante  
     from tbl_ComandaServico A  
     inner join tbl_AberturaCaixa B  
     on A.codigo_abertura_caixa = B.codigo  
     inner join tbl_AjudanteServico C  
     on A.codigo = C.Codigo_Comanda_Servico  
     inner join tbl_Servico D  
     on A.codigo_servico = D.codigo  
     inner join tbl_Comissao E  
     on E.codigo_funcionario = c.Codigo_Ajudante  
     and A.codigo_servico = E.codigo_servico  
     where convert(date,B.data) between '2019-10-25' and '2019-10-25' 
     and B.codigo_empresa = 1
     and C.Codigo_Ajudante = 30077  


    Resolvido da seguinte forma:

     select sum(valor.total) from
     (
     select 
     (A.valor * (select porcentagem_profissional from tbl_Comissao where codigo_funcionario = A.codigo_profissional and codigo_servico = A.codigo_servico )/100) * (E.porcentagem_ajudante/100)total
     from tbl_ComandaServico A  
     inner join tbl_AberturaCaixa B  
     on A.codigo_abertura_caixa = B.codigo  
     inner join tbl_AjudanteServico C  
     on A.codigo = C.Codigo_Comanda_Servico  
     inner join tbl_Servico D  
     on A.codigo_servico = D.codigo  
     inner join tbl_Comissao E  
     on E.codigo_funcionario = c.Codigo_Ajudante  
     and A.codigo_servico = E.codigo_servico  
     where convert(date,B.data) between '2019-10-25' and '2019-10-25' 
     and B.codigo_empresa = 1
     and C.Codigo_Ajudante = 30077  
     )
     as
     valor

    Obrigado a todos.

    sábado, 26 de outubro de 2019 18:01
  • Bom dia, por gentileza estou tentando fazer a soma dos valores abaixo na imagem e não estou conseguindo, se alguém puder ajudar.

    Muito obrigado.

    select 
    (A.valor * (select porcentagem_profissional from tbl_Comissao where codigo_funcionario = A.codigo_profissional and codigo_servico = A.codigo_servico )/100) * (E.porcentagem_ajudante/100) totalajudante  
     from tbl_ComandaServico A  
     inner join tbl_AberturaCaixa B  
     on A.codigo_abertura_caixa = B.codigo  
     inner join tbl_AjudanteServico C  
     on A.codigo = C.Codigo_Comanda_Servico  
     inner join tbl_Servico D  
     on A.codigo_servico = D.codigo  
     inner join tbl_Comissao E  
     on E.codigo_funcionario = c.Codigo_Ajudante  
     and A.codigo_servico = E.codigo_servico  
     where convert(date,B.data) between '2019-10-25' and '2019-10-25' 
     and B.codigo_empresa = 1
     and C.Codigo_Ajudante = 30077  


    Resolvido da seguinte forma:

     select sum(valor.total) from
     (
     select 
     (A.valor * (select porcentagem_profissional from tbl_Comissao where codigo_funcionario = A.codigo_profissional and codigo_servico = A.codigo_servico )/100) * (E.porcentagem_ajudante/100)total
     from tbl_ComandaServico A  
     inner join tbl_AberturaCaixa B  
     on A.codigo_abertura_caixa = B.codigo  
     inner join tbl_AjudanteServico C  
     on A.codigo = C.Codigo_Comanda_Servico  
     inner join tbl_Servico D  
     on A.codigo_servico = D.codigo  
     inner join tbl_Comissao E  
     on E.codigo_funcionario = c.Codigo_Ajudante  
     and A.codigo_servico = E.codigo_servico  
     where convert(date,B.data) between '2019-10-25' and '2019-10-25' 
     and B.codigo_empresa = 1
     and C.Codigo_Ajudante = 30077  
     )
     as
     valor

    Obrigado a todos.

    _Marigold_,

    Certo, então na verdade você queria com base somar todos os maiores valores optidos no seu Select, por isso utilizou um Select derivado.

    Poderia então neste cenário implementar uma CTE, veja abaixo:

    ;With CTESomarTotal (Valor)
    As
    (
     select 
     (A.valor * (select porcentagem_profissional from tbl_Comissao where codigo_funcionario = A.codigo_profissional and codigo_servico = A.codigo_servico )/100) * (E.porcentagem_ajudante/100)total
     from tbl_ComandaServico A  
     inner join tbl_AberturaCaixa B  
     on A.codigo_abertura_caixa = B.codigo  
     inner join tbl_AjudanteServico C  
     on A.codigo = C.Codigo_Comanda_Servico  
     inner join tbl_Servico D  
     on A.codigo_servico = D.codigo  
     inner join tbl_Comissao E  
     on E.codigo_funcionario = c.Codigo_Ajudante  
     and A.codigo_servico = E.codigo_servico  
     where convert(date,B.data) between '2019-10-25' and '2019-10-25' 
     and B.codigo_empresa = 1
     and C.Codigo_Ajudante = 30077  
    )
    Select Sum(Valor) As ValorTotal From CTESomarTotal
    Go

    O uso de CTE acaba sendo uma forma mais prática e elegante de se trabalhar com blocos de código Select se transformando em expressões, além disso, o uso desta técnica nos permite dividir as regras ou análises de negócios em pequenas partes trabalhando de forma isolada e posteriormente aplicando uma junção.

    A CTE foi introduzida a partir do SQL Server 2005 como um conceito que faz uso direto de alocação de dados em memória, em adicional nos permite trabalhar com recursividade dentro da própria CTE.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    segunda-feira, 28 de outubro de 2019 19:49