Usuário com melhor resposta
Somar Valores

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
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:
- Os resultados que estão sendo retornado estão incorretos?
- Você já analisou as condições que estão sendo impostas se elas estão corretas?
- 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
-
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
-
Boa tarde, gostaria de somar a coluna.
Obrigado.
- Marcado como Resposta _Manigold_ sábado, 26 de outubro de 2019 18:00
Todas as Respostas
-
_Manigold_
Seria possível compartilhar melhor a imagem, os valores estão bem pequenos,cVocê esta fazendo uma multiplicação.
Perguntas:
- Os resultados que estão sendo retornado estão incorretos?
- Você já analisou as condições que estão sendo impostas se elas estão corretas?
- 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
-
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
-
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
-
-
Boa tarde, gostaria de somar a coluna.
Obrigado.
- Marcado como Resposta _Manigold_ sábado, 26 de outubro de 2019 18:00
-
-
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
valorObrigado a todos.
-
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
valorObrigado 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]