sql >> Base de Datos >  >> RDS >> Sqlserver

Filtrado por opciones OFFSET-FETCH en la consulta Select - SQL Server / Tutorial TSQL Parte 118

Escenario:

Está trabajando como desarrollador de SQL Server con el equipo de desarrollo front-end. El equipo front-end necesita implementar la paginación. ¿Confundido acerca de la paginación? No hay problema. Piense en ver su extracto bancario o el extracto de su tarjeta de crédito. Donde las aplicaciones muestran solo 10 o 20 registros por página y tiene que hacer clic en Siguiente para ver los siguientes registros. Eso se llama paginación.

Ahora que entiende la paginación, el desarrollo frontal necesita una consulta SQL de usted que pueda usarse para devolver los resultados requeridos y deberían poder pasar el número de página para devolver los registros.


Solución:

Hay varias formas de escribir consultas de paginación, una de ellas es mediante el uso de la cláusula OFFSET FETCH. Debe ordenar los registros si desea utilizar OFFSET FETCH.

Creemos la tabla dbo.TotalSale e insertemos algunos registros de muestra. Solo he insertado 11 registros.

CREATE TABLE [dbo].[TotalSale] ( [id] [int] NOT NULL , [SalePersonFName] [varchar](100) NULL , [SalePersonLName ] [varchar](100) NULL , [ProductName] [varchar](100) NULL , [ItemsSold] [int] NULL , [SoldPrice] [float] NULL , [SoldDate] [date] NULL , [City] [varchar] (100) NULL , [Estado] [varchar](100) NULL , [País] [varchar](100) NULL , [Región] [varchar](100) NULL )INSERT [dbo].[TotalSale] ( [id] , [NombreFPersonaVenta], [NombreLPersonaVenta], [NombreProducto], [ArtículosVendidos], [PrecioVendido], [FechaVendida], [Ciudad], [Estado], [País], [Región] )VALUES ( 1, N'Aamir', N'Shahzad', N'TV', 1, 700, CAST(N'2015-07-15' COMO FECHA), N'Charlotte', N'NC', N'USA', N'North America' ), ( 2, N'M', N'Raza', N'Cell Phone', 2, 800, CAST(N'2015-07-15' COMO FECHA), N'Charlotte', N'NC', N'USA ', N'América del Norte' ), ( 3, N'Christy', N'Ladson', N'TV', 3, 1600, C AST(N'2015-04-02' COMO FECHA), N'High Point', N'NC', N'USA', N'North America' ), ( 4, N'John', N'Rivers', N'Laptop', 5, 2400, CAST(N'2014-03-09' COMO FECHA), N'Jersey City', N'NJ', N'USA', N'North America' ), ( 5, N 'Najaf', N'Ali', N'Computer', 1, 300, CAST(N'2015-06-20' COMO FECHA), N'Karachi', N'Sindh', N'Pakistan', N'Asia ' ), ( 6, N'Sukhjeet', N'Singh', N'TV', 2, 900, CAST(N'2015-06-21' COMO FECHA), N'ChandiGar', N'Punjab', N 'India', N'Asia' ), ( 7, N'Chirag', N'Patel', N'Cell Phone', 5, 1500, CAST(N'2015-06-23' COMO FECHA), N'AhmadAbad ', N'Gujrat', N'India', N'Asia' ), ( 8, N'Aleena', N'Aman', N'Laptop', 2, 800, CAST(N'2015-05-25' COMO FECHA), N'Lahore', N'Punjab', N'Pakistan', N'Asia' ), ( 9, N'Petra', N'Henry', N'TV', 10, 5000, CAST(N '2015-04-08' COMO FECHA), N'Paris', N'Île-de-France', N'France', N'Europe' ) , ( 10, N'Rita', N'Roger', N 'Ordenador portátil', 7, 2100, REPARTO(N'2015-04-11' COMO FECHA), N'Paris', N'Île-de-France', N'France', N'Europe' ), ( 11, N'Tamara', N'Tony ', N'Cell Phone', 2, 1200, CAST(N'2015-03-03' AS DATE), N'Frankfurt', N'Hesse', N'Germany', N'Europe' )
 
1) Digamos que si nos gustaría omitir las primeras 5 filas y queremos mostrar el resto de las filas que podemos usar debajo de la consulta.

Seleccione [id] , [SalePersonFName], [SalePersonLName], [ProductName],[ItemsSold], [SoldPrice] de dbo.TotalSale order by id OFFSET 5 rows
Cómo usar la Cláusula OFFSET FETCH en SQL Server para omitir las primeras X filas y mostrar el resto - Tutorial de SQL Server

2) Ahora, si deseamos mostrar 3 registros por página, podemos usar la siguiente consulta. En este caso, vamos a mostrar la primera página. por id COMPENSAR 0 FILAS OBTENER LAS SIGUIENTES 3 FILAS SOLAMENTE;
Cómo usar la cláusula OFFSET FETCH para devolver registros por página en SQL Server - Tutorial de SQL Server

Noté que tengo OFFSET 0, eso significa que quiero mostrar la primera página y con 3 filas. Si quiero mostrar los registros de la segunda página, configuraré el DESPLAZAMIENTO 1, la parte SOLO 3 FILAS Siguientes permanecerá igual y quiero mostrar solo 3 filas por página.

Podemos usar variables para no tiene que hacer cambios en la consulta y al cambiar el valor de las variables, podemos devolver los resultados requeridos. Puede crear un procedimiento almacenado si lo desea utilizando la siguiente consulta.

Declare @PageNumber intDeclare @RowsPerPage intset @RowsPerPage=3SET @PageNumber=1Select [id], [SalePersonFName], [SalePersonLName] , [ProductName], [ItemsSold], [SoldPrice] de dbo.TotalSale pedido por id OFFSET (@PageNumber-1)*@RowsPerPage ROWS FETCH NEXT @RowsPerPage ROWS ONLY;
 
Si necesitamos proporcionar un procedimiento almacenado al equipo de front-end, que acepta el número de página y el número de filas que les gustaría devolver para cada página, puede usar lo siguiente para crear un procedimiento almacenado.

Crear procedimiento dbo.sp_GetSaleRecordsPerPage
 @PageNumber int, @RowsPerPage intAS BEGINSelect [id], [SalePersonFName], [SalePersonLName], [ProductName],[ItemsSold], [SoldPrice] from dbo.TotalSale order by id DESPLAZAMIENTO (@PageNumber-1)*@RowsPerPage ROWS FETCH NEXT @RowsPerPage FILAS SOLAMENTE;FIN

Digamos que si nos gustaría devolver la segunda página con 4 registros, podemos usar dbo.sp_GetSaleRecordsPerPage al proporcionar los valores de parámetros a continuación.

EXEC dbo.sp_GetSaleRecordsPerPage 2,4
Cómo realizar Paginación en SQL Server usando la cláusula OFFSET FETCH - Tutorial TSQL