sql >> Databáze >  >> RDS >> Sqlserver

Filtrování podle možností OFFSET-FETCH ve výběrovém dotazu - SQL Server / Výukový program TSQL, část 118

Scénář:

Pracujete jako vývojář serveru SQL Server s týmem vývoje frontendu. Tým frontendu potřebuje implementovat stránkování. Máte zmatek ohledně stránkování? Žádný problém. Přemýšlejte o zobrazení výpisu z účtu nebo kreditní karty. Tam, kde aplikace zobrazují pouze 10 nebo 20 záznamů na stránku a vy musíte kliknout na další, abyste viděli další záznamy. Tomu se říká stránkování.

Nyní rozumíte stránkování, vývoj frontendu potřebuje od vás SQL dotaz, který dokáže použít k vrácení požadovaných výsledků a měli by být schopni předat číslo stránky pro vrácení záznamů.


Řešení:

Existuje několik způsobů, jak zapsat stránkovací dotazy, jedním z nich je použití klauzule OFFSET FETCH. Pokud chcete použít OFFSET FETCH, musíte záznamy seřadit.

Pojďme vytvořit tabulku dbo.TotalSale a vložit nějaké ukázkové záznamy. Vložil jsem pouze 11 záznamů.

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 , [State] [varchar](100) NULL , [Country] [varchar](100) NULL , [Region] [varchar](100) NULL )INSERT [dbo].[TotalSale] ( [id] , [SalePersonFName], [SalePersonLName], [ProductName], [ItemsSold], [SoldPrice], [SoldDate], [City], [Stát], [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'North America' ), ( 3, N'Christy', N'Ladson', N'TV', 3, 1600, C AST(N'2015-04-02' AS DATE), N'High Point', N'NC', N'USA', N'North America'), ( 4, N'John', N'Rivers', N'Laptop', 5, 2400, CAST(N'2014-03-09' AS DATE), N'Jersey City', N'NJ', N'USA', N'North America'), ( 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' AS DATE), N'Paris', N'Île-de-France', N'France', N'Europe'), ( 10, N'Rita', N'Roger', N 'Laptop', 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'Frankfurt', N'Hesse', N'Germany', N'Europe')
 
1) Řekněme, že pokud bychom chtěli přeskočit prvních 5 řádků a chtěli bychom zobrazit všechny zbývající řádky, můžeme použít níže uvedený dotaz.

Vyberte [id] , [SalePersonFName], [SalePersonLName], [ProductName], [ItemsSold], [SoldPrice] od dbo.TotalSale order by id OFFSET 5 rows
Jak použít klauzuli OFFSET FETCH na serveru SQL Server k přeskočení prvních X řádků a zobrazení všech zbývajících - SQL Server Tutorial

2) Nyní, pokud bychom chtěli zobrazit 3 záznamy na stránku, můžeme použít níže uvedený dotaz. V tomto případě zobrazíme první stránku

Vyberte [id], [SalePersonFName], [SalePersonLName], [ProductName], [ItemsSold], [SoldPrice] z dbo.TotalSale order podle id POSUN 0 ŘÁDKŮ NAČÍT POUZE DALŠÍ 3 ŘÁDKY;

Jak použít klauzuli OFFSET FETCH k vrácení záznamů na stránku v SQL Server – SQL Server výukový program

Všiml jsem si, že mám OFFSET 0, to znamená, že chci zobrazit první stránku a se 3 řádky. Pokud chci zobrazit záznamy druhé stránky, nastavím OFFSET 1, část POUZE Další 3 ŘÁDKY zůstane stejná, jako když chci zobrazit pouze 3 řádky na stránku.

Můžeme použít proměnné, abychom nemusíme provádět změny v dotazu a změnou hodnoty proměnných můžeme vrátit požadované výsledky. Uloženou proceduru můžete vytvořit, pokud chcete, pomocí níže uvedeného dotazu.

Deklarujte @PageNumber intDeclare @RowsPerPage intset @RowsPerPage=3SET @PageNumber=1Vyberte [id], [SalePersonFName], [SalePersonLName] , [ProductName],[ItemsSold], [SoldPrice] od dbo.TotalSale order by id OFFSET (@PageNumber-1)*@RowsPerPage ROWS FETCH NEXT @RowsPerPage ROWS ONLY;
 
Pokud potřebujeme poskytnout uloženou proceduru týmu frontendu, který přijímá číslo stránky a počet řádků, které by chtěli vrátit pro každou stránku, můžete použít níže k vytvoření uložené procedury.

Vytvořit proceduru dbo.sp_GetSaleRecordsPerPage
 @PageNumber int, @RowsPerPage intAS BEGINVyberte [id], [SalePersonFName], [SalePersonLName], [ProductName], [ItemsSold], [Soldbo order byCtalS] OFFSET (@PageNumber-1)*@RowsPerPage ROWS NAČÍTÁNÍ DALŠÍ @RowsPerPage ROWS ONLY;END

Řekněme, že pokud bychom chtěli vrátit druhou stránku se 4 záznamy, můžeme použít dbo.sp_GetSaleRecordsPerPage poskytnutím níže uvedených hodnot parametrů.

EXEC dbo.sp_GetSaleRecordsPerPage 2,4 
Jak provádět stránkování na serveru SQL pomocí klauzule OFFSET FETCH – výukový program TSQL
 




  1. Škálování PostgreSQL pro velké množství dat

  2. datetime to totalminute v sql

  3. Vytvoření profilu pošty databáze v SQL Server (T-SQL)

  4. Změňte sloupce PostgreSQL používané v pohledech