Numeración por grupo

10/11/2004 - 13:19 por jose | Informe spam
tengo dos columnas A y B, A tiene.

1
1
2
2
2
3
4
4

quiero que B se complemete con una numeración de 1 a n, donde reinicie el
conteo cuando A cambia, o sea,

A B
1 1
1 2
2 1
2 2
2 3
3 1
4 1
4 2


como sería la sentencia del update?

gracias!!

Preguntas similare

Leer las respuestas

#1 DiGiTaL
10/11/2004 - 14:14 | Informe spam
mira este ejemplo... lo unico que tendrias que hacer extra es insertar
temporalmente una columna autonumerica en la tabla A para poder hacer el
update..

create table #t(cod int, cont int, autoNum int)

insert into #t(cod, cont, autoNum)
select 1, null, 1
union
select 1, null, 2
union
select 2, null, 3
union
select 2, null, 4
union
select 2, null, 5
union
select 3, null, 6
union
select 4, null, 7
union
select 4, null, 8

DECLARE @cod int
DECLARE @codOLD int
declare @autoNum int
set @autoNum=1
declare @i int
set @i=1
DECLARE rTemp CURSOR FOR

select cod from #t order by cod

OPEN rTemp

FETCH NEXT FROM rTemp
INTO @cod

WHILE @@FETCH_STATUS = 0
BEGIN

if @cod<>@codOLD set @i=1
UPDATE #t SET cont=@i where autoNum=@autoNum
set @codOLD=@cod
set @i=@i+1
set @autoNum=@autoNum+1
FETCH NEXT FROM rTemp
INTO @cod
END

CLOSE rTemp
DEALLOCATE rTemp



select cod, cont from #t
drop table #t

DiGiTaL

"jose" escribió en el mensaje
news:
tengo dos columnas A y B, A tiene.

1
1
2
2
2
3
4
4

quiero que B se complemete con una numeración de 1 a n, donde reinicie el
conteo cuando A cambia, o sea,

A B
1 1
1 2
2 1
2 2
2 3
3 1
4 1
4 2


como sería la sentencia del update?

gracias!!
Respuesta Responder a este mensaje
#2 ulises
10/11/2004 - 15:06 | Informe spam
Dados lo siguiente datos :

create table tabla ( a int not null , b int null)
insert into tabla ( a ) select 1
insert into tabla ( a ) select 1
insert into tabla ( a ) select 2
insert into tabla ( a ) select 2
insert into tabla ( a ) select 2
insert into tabla ( a ) select 3
insert into tabla ( a ) select 3
insert into tabla ( a ) select 2

se puede actualizar con lo siguiente :

declare @sec int
set @sec = 0

declare @tabla table ( secuencia int identity(1,1),
a int,
b int,
anterior int )

insert into @tabla (a,b)
select a, b from tabla order by a

update t1
set anterior = ISNULL(t2.a,0)
from @tabla t1 left join @tabla t2
on t1.secuencia = t2.secuencia + 1

update @tabla
set @sec=b=(case when a=anterior then @sec+1 else 1 end)

delete from tabla

insert into tabla select a, b from @tabla

que te dará :

a b
1 1
1 2
2 1
2 2
2 3
2 4
3 1
3 2

(8 row(s) affected)

Saludos,
Ulises

tengo dos columnas A y B, A tiene.

1
1
2
2
2
3
4
4

quiero que B se complemete con una numeración de 1 a n,


donde reinicie el
conteo cuando A cambia, o sea,

A B
1 1
1 2
2 1
2 2
2 3
3 1
4 1
4 2


como serà­a la sentencia del update?

gracias!!
.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida