Ir para conteúdo

POWERED BY:

Arquivado

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

emazoli

Contador que reinicia conforme mudanca de registro ?

Recommended Posts

Pessoal, sou novo aqui e preciso de um help sobre um contador T-SQL (por favor !!!):

 

Tenho a tabela dbo.teste:

 

id (int) texto (varchar(50))

==== ======

1 texto1

30 texto2

500 texto3

30 texto4

500 texto5

 

Resultado esperado:

NOrdemId id texto

======= ======= ======

1 1 texto1

1 30 texto2 (contador reiniciado, pois Id mudou)

2 30 texto4

1 500 texto5 (contador reiniciado, pois Id mudou)

2 500 texto3

 

Como pode perceber, ao mudar o id o contador é reiniciado.

 

Montei a função abaixo que é um contador simples e não reinicia o contador:

 

ALTER FUNCTION dbo.contadorteste ()

RETURNS @TabelaAcumulada TABLE (NOrdemId int IDENTITY (1, 1), id int, texto varchar(50))

 

AS

BEGIN

DECLARE @RowsAdded int

DECLARE @NOrdemId int

 

INSERT @TabelaAcumulada

SELECT id, texto

FROM dbo.teste

ORDER BY id

 

SET @RowsAdded = @@rowcount

 

SET @NOrdemId = 1

WHILE @NOrdemId <= @RowsAdded

BEGIN

SET @NOrdemId = @NOrdemId + 1

END

 

RETURN

END

 

O resultado desta função é:

 

NOrdemId id texto

======= ======= ======

1 1 texto1

2 30 texto2

3 30 texto4

4 500 texto5

5 500 texto3

Compartilhar este post


Link para o post
Compartilhar em outros sites

para quem se interessar, resolví o problema:CREATE FUNCTION dbo.fn_ContadorTeste () RETURNS @TabelaAcumulada TABLE (NOrdemId int IDENTITY (1, 1), NOrdemId2 int, Id int, Texto varchar(50)) AS BEGIN DECLARE @RowsAdded int DECLARE @NOrdemId intDECLARE @NOrdemId2 intDECLARE @oldId int DECLARE @newId intINSERT @TabelaAcumulada SELECT 0 AS NOrdemId2, id, TextoFROM dbo.testeORDER BY idSET @RowsAdded = @@rowcount SET @NOrdemId = 1SET @NOrdemId2 = 1WHILE @NOrdemId <= @RowsAdded BEGINSET @oldId = (SELECT Id FROM @TabelaAcumulada WHERE NOrdemId = @NOrdemId) SET @newId = (SELECT Id FROM @TabelaAcumulada WHERE NOrdemId = @NOrdemId + 1) UPDATE @TabelaAcumulada SET NOrdemId2 = @NOrdemId2WHERE NOrdemId = @NOrdemIdIF @oldId <> @newId BEGIN SET @NOrdemId2 = 1 END ELSE BEGIN SET @NOrdemId2 = @NOrdemId2 + 1ENDSET @NOrdemId = @NOrdemId + 1 ENDRETURN END

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.