Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Filtrage par options OFFSET-FETCH dans la requête Select - Tutoriel SQL Server / TSQL Partie 118

Scénario :

Vous travaillez en tant que développeur SQL Server avec l'équipe de développement frontal. L'équipe frontale doit implémenter la pagination. Confus au sujet de la pagination ? Aucun problème. Pensez à consulter votre relevé bancaire ou votre relevé de carte de crédit. Lorsque les applications n'affichent que 10 ou 20 enregistrements par page et que vous devez cliquer sur Suivant pour voir les enregistrements suivants. C'est ce qu'on appelle la pagination.

Maintenant que vous comprenez la pagination, le développement frontal nécessite une requête SQL de votre part qui peut être utilisés pour renvoyer les résultats requis et ils doivent pouvoir transmettre le numéro de page pour renvoyer les enregistrements.


Solution :

Il existe plusieurs façons d'écrire des requêtes de pagination, l'une d'entre elles consiste à utiliser la clause OFFSET FETCH. Vous devez trier les enregistrements si vous souhaitez utiliser OFFSET FETCH.

Créons la table dbo.TotalSale et insérons quelques exemples d'enregistrements. Je n'ai inséré que 11 enregistrements.

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 , [Ville] [varchar] (100) NULL , [État] [varchar](100) NULL , [Pays] [varchar](100) NULL , [Région] [varchar](100) NULL )INSERT [dbo].[TotalSale] ( [id] , [SalePersonFName], [SalePersonLName], [ProductName], [ItemsSold], [SoldPrice], [SoldDate], [City], [State], [Country], [Region] )VALUES ( 1, N'Aamir', N'Shahzad', N'TV', 1, 700, CAST(N'2015-07-15' AS DATE), N'Charlotte', N'NC', N'USA', N'North America' ), ( 2, N'M', N'Raza', N'Cell Phone', 2, 800, CAST(N'2015-07-15' AS DATE), N'Charlotte', N'NC', N'USA ', N'Amérique du Nord' ) , ( 3, N'Christy', N'Ladson', N'TV', 3, 1600, C AST(N'2015-04-02' COMME DATE), N'High Point', N'NC', N'USA', N'Amérique du Nord' ), ( 4, N'John', N'Rivers', N'Laptop', 5, 2400, CAST(N'2014-03-09' COMME DATE), N'Jersey City', N'NJ', N'USA', N'Amérique du Nord' ) , ( 5, N 'Najaf', N'Ali', N'Computer', 1, 300, CAST(N'2015-06-20' AS DATE), N'Karachi', N'Sindh', N'Pakistan', N'Asia ' ) , ( 6, N'Sukhjeet', N'Singh', N'TV', 2, 900, CAST(N'2015-06-21' AS DATE), N'ChandiGar', N'Punjab', N 'India', N'Asia' ), ( 7, N'Chirag', N'Patel', N'Cell Phone', 5, 1500, CAST(N'2015-06-23' AS DATE), N'AhmadAbad ', N'Gujrat', N'India', N'Asia' ), ( 8, N'Aleena', N'Aman', N'Laptop', 2, 800, CAST(N'2015-05-25' AS DATE), N'Lahore', N'Punjab', N'Pakistan', N'Asia' ), ( 9, N'Petra', N'Henry', N'TV', 10, 5000, CAST(N '2015-04-08' COMME DATE), N'Paris', N'Île-de-France', N'France', N'Europe' ) , ( 10, N'Rita', N'Roger', N 'Ordinateur portable', 7, 2100, CAST(N'2015-04-11' AS DATE), 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'Francfort', N'Hesse', N'Allemagne', N'Europe' )
 
1) Supposons que nous souhaitions ignorer les 5 premières lignes et afficher toutes les autres lignes que nous pouvons utiliser sous la requête.

Sélectionnez [id] , [SalePersonFName], [SalePersonLName], [ProductName],[ItemsSold], [SoldPrice] de la commande dbo.TotalSale par id OFFSET 5 lignes
Comment utiliser la clause OFFSET FETCH dans SQL Server pour ignorer les X premières lignes et afficher toutes les autres - Tutoriel SQL Server

2) Maintenant, si nous souhaitons afficher 3 enregistrements par page, nous pouvons utiliser la requête ci-dessous. Dans ce cas, nous allons afficher la première page

Sélectionnez [id], [SalePersonFName], [SalePersonLName], [ProductName],[ItemsSold], [SoldPrice] de la commande dbo.TotalSale par id OFFSET 0 ROWS FETCH NEXT 3 ROWS UNIQUEMENT ;

Comment utiliser la clause OFFSET FETCH pour renvoyer des enregistrements par page dans SQL Server - Tutoriel SQL Server

J'ai remarqué que j'ai OFFSET 0, cela signifie que je veux afficher la première page et avec 3 lignes. Si je veux afficher les enregistrements de la deuxième page, je définirai sur OFFSET 1, la partie Next 3 ROWS ONLY restera la même car je veux afficher seulement 3 lignes par page.

Nous pouvons utiliser des variables afin que nous n'avons pas à apporter de modifications à la requête et en modifiant la valeur des variables, nous pouvons renvoyer les résultats requis. Vous pouvez créer une procédure stockée si vous le souhaitez en utilisant la requête ci-dessous.

Declare @PageNumber intDeclare @RowsPerPage intset @RowsPerPage=3SET @PageNumber=1Select [id], [SalePersonFName], [SalePersonLName] , [ProductName], [ItemsSold], [SoldPrice] de la commande dbo.TotalSale par id OFFSET (@PageNumber-1)*@RowsPerPage ROWS FETCH NEXT @RowsPerPage ROWS ONLY ;
 
Si nous devons fournir une procédure stockée à l'équipe frontale, qui accepte le numéro de page et le nombre de lignes qu'elle souhaite renvoyer pour chaque page, vous pouvez utiliser ci-dessous pour créer une procédure stockée.

Créer une procédure dbo.sp_GetSaleRecordsPerPage
 @PageNumber int, @RowsPerPage intAS BEGINSélectionnez [id], [SalePersonFName], [SalePersonLName], [ProductName],[ItemsSold], [SoldPrice] à partir de dbo.TotalSale trier par id OFFSET (@PageNumber-1)*@RowsPerPage ROWS FETCH NEXT @RowsPerPage ROWS ONLY;END

Disons que si nous souhaitons renvoyer la deuxième page avec 4 enregistrements, nous pouvons utiliser dbo.sp_GetSaleRecordsPerPage en fournissant les valeurs de paramètre ci-dessous.

EXEC dbo.sp_GetSaleRecordsPerPage 2,4 
Comment effectuer la pagination dans SQL Server à l'aide de la clause OFFSET FETCH - Tutoriel TSQL