Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Memfilter dengan Opsi OFFSET-FETCH dalam Pilih kueri - Tutorial SQL Server / TSQL Bagian 118

Skenario :

Anda bekerja sebagai pengembang SQL Server dengan tim pengembangan ujung depan. Tim ujung depan perlu menerapkan pagination. Bingung tentang Pagination? Tidak masalah. Pikirkan tentang melihat laporan mutasi bank atau laporan kartu kredit Anda. Di mana aplikasi hanya menampilkan 10 atau 20 record per halaman dan Anda harus mengklik next untuk melihat record berikutnya. Itu disebut pagination.

Sekarang Anda memahami pagination, pengembangan front end membutuhkan query SQL dari Anda yang bisa digunakan untuk mengembalikan hasil yang diperlukan dan mereka harus dapat melewati nomor halaman untuk mengembalikan catatan.


Solusi:

Ada beberapa cara untuk menulis kueri Pagination, Salah satunya adalah dengan menggunakan klausa OFFSET FETCH. Anda harus mengurutkan record jika ingin menggunakan OFFSET FETCH.

Mari kita buat tabel dbo.TotalSale dan masukkan beberapa contoh record. Saya hanya memasukkan 11 record.

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 , [Negara Bagian] [varchar](100) NULL , [Negara] [varchar](100) NULL , [Wilayah] [varchar](100) NULL )INSERT [dbo].[TotalPenjualan] ( [id] , [NamaPersonPenjual], [NamaPersonPenjual], [NamaProduk], [Item Terjual], [HargaSold], [Tanggal Jual], [Kota], [Negara Bagian], [Negara], [Wilayah] )NILAI ( 1, N'Aamir', N'Shahzad', N'TV', 1, 700, CAST(N'2015-07-15' AS DATE), N'Charlotte', N'NC', N'USA', N'Amerika Utara' ), (2, N'M', N'Raza', N'Ponsel', 2, 800, CAST(N'2015-07-15' SEBAGAI TANGGAL), N'Charlotte', N'NC', N'USA ', N'Amerika Utara' ), ( 3, N'Christy', N'Ladson', N'TV', 3, 1600, C AST(N'2015-04-02' AS TANGGAL), N'Titik Tinggi', N'NC', N'USA', N'Amerika Utara' ), ( 4, N'John', N'Rivers', N'Laptop', 5, 2400, CAST(N'2014-03-09' AS DATE), N'Jersey City', N'NJ', N'USA', N'Amerika Utara' ), ( 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(23-06-2015' AS TANGGAL), N'AhmadAbad ', N'Gujrat', N'India', N'Asia' ) , ( 8, N'Aleena', N'Aman', N'Laptop', 2, 800, CAST(N'2015-05-25' AS TANGGAL), 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) Katakanlah jika kita ingin melewati 5 baris pertama dan ingin menampilkan semua baris lainnya, kita dapat menggunakan kueri di bawah ini.

Pilih [id] , [SalePersonFName], [SalePersonLName], [ProductName],[ItemsSold], [SoldPrice] dari dbo.TotalSale order dengan id OFFSET 5 baris
Cara menggunakan OFFSET FETCH Clause di SQL Server untuk melewati baris X pertama dan menampilkan sisanya - Tutorial SQL Server

2) Sekarang jika kita ingin menampilkan 3 record per halaman, kita dapat menggunakan query di bawah ini. Dalam hal ini kita akan menampilkan halaman pertama

Pilih [id], [SalePersonFName], [SalePersonLName], [ProductName],[ItemsSold], [SoldPrice] dari dbo.TotalSale order by id OFFSET 0 ROWS FETCH NEXT 3 ROWS ONLY;

Cara menggunakan klausa OFFSET FETCH untuk mengembalikan catatan per halaman di SQL Server - Tutorial SQL Server

Perhatikan bahwa saya memiliki OFFSET 0, itu berarti saya ingin menampilkan halaman pertama dan dengan 3 baris. Jika saya ingin menampilkan catatan halaman kedua, saya akan mengatur ke OFFSET 1, bagian Next 3 ROWS ONLY akan tetap sama seperti ingin menampilkan hanya 3 baris per halaman.

Kita bisa menggunakan variabel jadi kita tidak perlu membuat perubahan dalam kueri dan dengan mengubah nilai variabel, kami dapat mengembalikan hasil yang diperlukan. Anda dapat membuat Prosedur Tersimpan jika Anda suka dengan menggunakan kueri di bawah ini.

Declare @PageNumber intDeclare @RowsPerPage intset @RowsPerPage=3SET @PageNumber=1Pilih [id], [SalePersonFName], [SalePersonLName] , [ProductName],[ItemsSold], [SoldPrice] dari dbo.TotalSale pesanan dengan id OFFSET (@PageNumber-1)*@RowsPerPage ROWS FETCH NEXT @RowsPerPage ROWS ONLY;
 
Jika kami perlu menyediakan Stored Procedure kepada tim Front End, yang menerima nomor halaman dan jumlah baris yang ingin mereka kembalikan untuk setiap halaman, Anda dapat menggunakan di bawah ini untuk membuat Stored Procedure.

Buat prosedur dbo.sp_GetSaleRecordsPerPage
 @PageNumber int, @RowsPerPage intAS BEGINPilih [id], [SalePersonFName], [SalePersonLName], [ProductName],[ItemsSold], [SoldPrice] dari dbo order by.TotalSale OFFSET (@PageNumber-1)*@RowsPerPage ROWS FETCH NEXT @RowsPerPage ROWS ONLY;END

Misalnya jika kita ingin mengembalikan halaman kedua dengan 4 record, kita dapat menggunakan dbo.sp_GetSaleRecordsPerPage dengan memberikan nilai parameter di bawah ini.

EXEC dbo.sp_GetSaleRecordsPerPage 2,4 
Cara melakukan Pagination di SQL Server dengan menggunakan klausa OFFSET FETCH - Tutorial TSQL
 




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Perkirakan Penghematan Kompresi Data di SQL Server

  2. Kolom apa yang umumnya membuat indeks bagus?

  3. Ubah varchar menjadi datetime di SQL Server

  4. Fungsi IndexOf di T-SQL

  5. Menggunakan T-SQL, kembalikan elemen delimited ke-n dari sebuah string