Usuário com melhor resposta
[Where] Como faço um where sobre o valor de uma subtração?

Pergunta
-
Olá,
Tenho o seguinte select:select A, B, A - B as C From Alfabeto
O que preciso fazer é trazer apenas os resultados onde C é > 0.
Como poderia fazer isto?
Fazer um where sobre o valor da conta?
Obrigado amigos
K2rto'4 - Analista de Sistemas
"Hoje melhor do que ontem, amanhã melhor do que hoje!" 改 善- Editado TI DEV sexta-feira, 27 de março de 2015 14:22
Respostas
-
Olá,
Tudo bem?
No meu caso aqui talvez seja mais complicado. Segue select real:
select Nome, count(A) as A, count(B) as B, count(A) - count(B) as C from CTE_Union group by Nome order by 4 desc
Já tentei os casos abaixo, mas nada deu certo:
count(A) - count(B) > 0
(count(A) - count(B)) > 0
O erro que levo é:
An aggregate may not appear in the WHERE clause unless it is in a subquery contained in a HAVING clause or a select list, and the column being aggregated is an outer reference.
E agora?
Obrigado
K2rto'4 - Analista de Sistemas
"Hoje melhor do que ontem, amanhã melhor do que hoje!" 改 善
Amigo,
A mensagem é clara, use a cláusula HAVING. Segue abaixo uma sugestão para você adaptar ao seu script:
select Nome, count(A) as A, count(B) as B, count(A) - count(B) as C from CTE_Union group by Nome HAVING (count(A) - count(B)) > 0 GO
Para maiores informações veja:
https://technet.microsoft.com/pt-br/library/ms173260%28v=sql.110%29.aspx
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval Ramos
Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
----------------------------------
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Sugerido como Resposta _Juliano_Alves_ sexta-feira, 27 de março de 2015 16:45
- Marcado como Resposta TI DEV sexta-feira, 27 de março de 2015 17:04
Todas as Respostas
-
K2RTO'4,
Segue um script para você adaptar a sua necessidade:
DECLARE @TB_TESTE AS TABLE ( A INT, B INT); INSERT INTO @TB_TESTE VALUES (4, 1) INSERT INTO @TB_TESTE VALUES (5, 1) INSERT INTO @TB_TESTE VALUES (6, 6) SELECT * FROM @TB_TESTE SELECT A, B, (A-B) AS C FROM @TB_TESTE WHERE (A-B) > 0; GO
Segue um print como evidência de teste:
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval Ramos
Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
----------------------------------
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Sugerido como Resposta Junior Galvão - MVPMVP sábado, 28 de março de 2015 17:54
-
Bom dia,
Seguem 2 sugestões para teste de qual funciona melhor para o seu caso:
select A, B, A - B as C From Alfabeto where A - B > 0
with CTE_Sub as ( select A, B, A - B as C From Alfabeto ) select * from CTE_Sub where C > 0
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Sugerido como Resposta Junior Galvão - MVPMVP sábado, 28 de março de 2015 17:55
-
Olá,
Tudo bem?
No meu caso aqui talvez seja mais complicado. Segue select real:
select Nome, count(A) as A, count(B) as B, count(A) - count(B) as C from CTE_Union group by Nome order by 4 desc
Já tentei os casos abaixo, mas nada deu certo:
count(A) - count(B) > 0
(count(A) - count(B)) > 0
O erro que levo é:
An aggregate may not appear in the WHERE clause unless it is in a subquery contained in a HAVING clause or a select list, and the column being aggregated is an outer reference.
E agora?
Obrigado
K2rto'4 - Analista de Sistemas
"Hoje melhor do que ontem, amanhã melhor do que hoje!" 改 善
- Editado TI DEV sexta-feira, 27 de março de 2015 15:09
-
Deste jeito:
Select A,B, A-B as C from ( select Nome, count(A) as A, count(B) as B, from CTE_Union group by Nome ) t1 where A-B >0
att
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
- Editado William John Adam Trindade sexta-feira, 27 de março de 2015 15:14
-
Olá,
Tudo bem?
No meu caso aqui talvez seja mais complicado. Segue select real:
select Nome, count(A) as A, count(B) as B, count(A) - count(B) as C from CTE_Union group by Nome order by 4 desc
Já tentei os casos abaixo, mas nada deu certo:
count(A) - count(B) > 0
(count(A) - count(B)) > 0
O erro que levo é:
An aggregate may not appear in the WHERE clause unless it is in a subquery contained in a HAVING clause or a select list, and the column being aggregated is an outer reference.
E agora?
Obrigado
K2rto'4 - Analista de Sistemas
"Hoje melhor do que ontem, amanhã melhor do que hoje!" 改 善
Amigo,
A mensagem é clara, use a cláusula HAVING. Segue abaixo uma sugestão para você adaptar ao seu script:
select Nome, count(A) as A, count(B) as B, count(A) - count(B) as C from CTE_Union group by Nome HAVING (count(A) - count(B)) > 0 GO
Para maiores informações veja:
https://technet.microsoft.com/pt-br/library/ms173260%28v=sql.110%29.aspx
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval Ramos
Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
----------------------------------
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Sugerido como Resposta _Juliano_Alves_ sexta-feira, 27 de março de 2015 16:45
- Marcado como Resposta TI DEV sexta-feira, 27 de março de 2015 17:04
-