Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Hacer algo parecido a un identity pero seccionado

Estas en el tema de Hacer algo parecido a un identity pero seccionado en el foro de SQL Server en Foros del Web. Ayuda con el siguiente problema por favor. Tengo la siguiente tabla: CREATE TABLE #OFICINAS ( COD_OFICINA NVARCHAR(5) ) INSERT INTO #OFICINAS VALUES('OF001') INSERT INTO #OFICINAS ...
  #1 (permalink)  
Antiguo 09/08/2011, 10:41
 
Fecha de Ingreso: septiembre-2005
Mensajes: 74
Antigüedad: 18 años, 7 meses
Puntos: 0
Hacer algo parecido a un identity pero seccionado

Ayuda con el siguiente problema por favor.

Tengo la siguiente tabla:

CREATE TABLE #OFICINAS
(
COD_OFICINA NVARCHAR(5)
)

INSERT INTO #OFICINAS VALUES('OF001')
INSERT INTO #OFICINAS VALUES('OF001')
INSERT INTO #OFICINAS VALUES('OF001')
INSERT INTO #OFICINAS VALUES('OF002')
INSERT INTO #OFICINAS VALUES('OF002')
INSERT INTO #OFICINAS VALUES('OF002')
INSERT INTO #OFICINAS VALUES('OF002')
INSERT INTO #OFICINAS VALUES('OF003')
INSERT INTO #OFICINAS VALUES('OF003')
INSERT INTO #OFICINAS VALUES('OF003')
INSERT INTO #OFICINAS VALUES('OF003')


Mi duda es cómo crear una columna CORRELATIVO de tipo entero, que se enumere consecutivamente desde 1 hasta donde termine un COD_OFICINA, ejemplo:

COD_OFICINA | CORRELATIVO
OF001 | 1
OF001 | 2
OF001 | 3
OF002 | 1
OF002 | 2
OF002 | 3
OF002 | 4
OF003 | 1
OF003 | 2
OF003 | 3
OF003 | 4

Alguna idea para este problemilla?, gracias.
  #2 (permalink)  
Antiguo 09/08/2011, 10:47
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Hacer algo parecido a un identity pero seccionado

Te pongo un ejemplo con Ciudades:

create table ciudades(
PAIS VARCHAR(20) not null,
CIUDAD VARCHAR(20) not null
)
GO

insert into ciudades(PAIS, CIUDAD)
values('MEXICO', 'MONTERREY')
insert into ciudades(PAIS, CIUDAD)
values('MEXICO', 'GUADALAJARA')
insert into ciudades(PAIS, CIUDAD)
values('MEXICO', 'DISTRITO FEDERAL')
insert into ciudades(PAIS, CIUDAD)
values('MEXICO', 'TIJUANA')
insert into ciudades(PAIS, CIUDAD)
values('ESPAÑA', 'VALENCIA')
insert into ciudades(PAIS, CIUDAD)
values('ESPAÑA', 'MADRID')
insert into ciudades(PAIS, CIUDAD)
values('ESPAÑA', 'BARCELONA')
insert into ciudades(PAIS, CIUDAD)
values('ITALIA', 'ROMA')
insert into ciudades(PAIS, CIUDAD)
values('ITALIA', 'MILAN')
GO

SELECT PAIS, (SELECT COUNT(*)
FROM ciudades AS I
WHERE I.PAIS=J.PAIS
AND I.CIUDAD>=J.CIUDAD) AS No
, CIUDAD
FROM ciudades AS J
ORDER BY PAIS, No
go

DROP TABLE ciudades
GO
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 09/08/2011, 10:55
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Hacer algo parecido a un identity pero seccionado

Prueba con esto:

select row_number() over (partition by cod_oficina order by cod_oficina) rn, cod_oficina from #oficinas

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: parecido, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:20.