Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

lucianotmo

Query - Subtrair valores da mesma coluna

Recommended Posts

Pessoal, estou com uma duvida simples em uma query, vejam se podem me ajudar

 

tabela_usos

cod_tab | qtd | result_qtd

1 1

2 1 0

3 2 1

4 2 0

5 2 0

6 5 3

7 7 2

8 7 0

9 8 1

10 10 2

 

O resultado da coluna result_qtd deve ser obtido da seguinte forma:

O ultimo registro da coluna "qtd" (subtraído) pelo penúltimo registro, e assim sucessivamente.

 

-----------------------///-------------------------------////--------------------------------------------///---------------------------------------

 

Tentei da seguinte forma mas sem sucesso:

 

1° - Criei uma tabela temporária como um espelho da original

select cod_tab, qtd into temp_usos from usos

 

2° - Deletei o primeiro registro da tabela temp_usos

delete temp_usos where cod_tab = 1

 

3° - Query

select u.qtd, (t.qtd - u.qtd) as result_qtd

from usos u, temp_usos t

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em geral estas coisas ficam fáceis usando Analytic Functions , conheço as do Oracle , creio que as Sql Server são semelhantes

 

Amigo, a função "LEAD"do analytic function resolveria meu problema. Mas ela Só esta disponível a partir da versão 2012 do SQL Server e Utilizamos a versão 2008R2 atualmente.

 

No SQL Server 2012 R2 a consulta abaixo deu certo.

select qtd,

(LEAD(qtd) OVER (ORDER BY cod_tab) - qtd) as cont_qtd

from usos

 

Mas em produção, onde utilizamos o SQL R2, apresentou o seguinte erro:

'LEAD' is not a recognized built-in function name.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando eu preciso da função LEAD, geralmente eu simula ela atraves de uma CTE com oi ROW_NUMBER()

Veja alguns exemplos:

http://blog.sqlauthority.com/2011/11/24/sql-server-solution-to-puzzle-simulate-lead-and-lag-without-using-sql-server-2012-analytic-function/

 

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.