row_number over number ejemplos ejemplo sql-server

over - SQL SERVER, instrucción SELECT con auto generar fila ID



row_number() over(partition by (8)

¿Alguien recuerda el nombre de la función utilizada para generar el número de fila secuencial integrado SQL Server 2000?


¿Es esto quizás lo que estás buscando?

selecciona NEWID () * de TABLE


Si está haciendo uso de GUID, esto debería ser agradable y fácil, si está buscando una ID de número entero, tendrá que esperar otra respuesta.

SELECT newId() AS ColId, Col1, Col2, Col3 FROM table1

NewId () generará un nuevo GUID para usted que puede usar como su columna de id generada automáticamente.


IDENTITY (int, 1, 1) debería hacerlo si está seleccionando into. En SQL 2000, utilizo simplemente poner los resultados en una tabla temporal y consultar esos términos posteriores.


Esto funcionará en SQL Server 2008.

select top 100 ROW_NUMBER() OVER (ORDER BY tmp.FirstName) ,* from tmp

Aclamaciones


¿Desea que se devuelva una columna de número entero creciente con su conjunto de registros? Si es así: -

--Check for existance if exists (select * from dbo.sysobjects where [id] = object_id(N''dbo.t'') AND objectproperty(id, N''IsUserTable'') = 1) drop table dbo.t go --create dummy table and insert data create table dbo.t(x char(1) not null primary key, y char(1) not null) go set nocount on insert dbo.t (x,y) values (''A'',''B'') insert dbo.t (x,y) values (''C'',''D'') insert dbo.t (x,y) values (''E'',''F'') --create temp table to add an identity column create table dbo.#TempWithIdentity(i int not null identity(1,1) primary key,x char(1) not null unique,y char(1) not null) --populate the temporary table insert into dbo.#TempWithIdentity(x,y) select x,y from dbo.t --return the data select i,x,y from dbo.#TempWithIdentity --clean up drop table dbo.#TempWithIdentity


Select (Select count(y.au_lname) from dbo.authors y where y.au_lname + y.au_fname <= x.au_lname + y.au_fname) as Counterid, x.au_lname,x.au_fname from authors x group by au_lname,au_fname order by Counterid --Alternatively that can be done which is equivalent as above..


Aquí hay un método simple que clasifica las filas después, sin embargo, se ordenan, es decir, se insertan en su tabla. En tu instrucción SELECT simplemente agrega el campo

ROW_NUMBER() OVER (ORDER BY CAST(GETDATE() AS TIMESTAMP)) AS RowNumber.


Puede hacerlo directamente en SQL2000, según la página de Microsoft: http://support.microsoft.com/default.aspx?scid=kb;en-us;186133

select rank=count(*), a1.au_lname, a1.au_fname from authors a1, authors a2 where a1.au_lname + a1.au_fname >= a2.au_lname + a2.au_fname group by a1.au_lname, a1.au_fname order by rank

El único problema con este enfoque es que (como dice Jeff en SQL Server Central) es una unión triangular. Por lo tanto, si tiene diez registros, esto será rápido; si tiene miles de registros, será lento, y con un millón de registros, ¡puede que nunca se complete!

Vea aquí para una mejor explicación de las uniones triangulares: http://www.sqlservercentral.com/articles/T-SQL/61539/