需要排序的分頁SQL語句(sqlserver)

2021-08-20 05:46:22 字數 1612 閱讀 6249

真正讓我摒棄top的原因是,我專案中要用到order by進行排序,sqlserver又是乙個在分頁這一塊支援的一般的資料庫,再加上乙個排序,徹底讓我和top說了byebye!

那麼需要排序的分頁應該怎麼寫呢?我採用的是row_number() over函式配合with臨時表進行實現。話不多說,先上**。

with temptbl as (

select row_number() over (order by t.show_count)as row,t.* from

(select distinct

a.id,

a.film_id,

a.film_name,

a.english_name,

a.[language],

a.duration,

a.dimensional,

a.country,

a.director,

a.actor,

a.opening_date,

a.[catalog],

a.picture,

a.description,

b.show_count,

b.rating,

b.star_picture

from

api_film a

join (

select distinct

t1.show_count,

t1.rating,

t1.star_picture

from

api_film t1

join api_film_show t2 on t1.film_id = t2.film_id

join api_film_cinema t3 on t2.cinema_id = t3.cinema_id

where t3.cinema_id = #

) b on a.show_count = b.show_count ) t)

select * from temptbl where row between # and #
先不論我這條sql寫的怎麼樣,關鍵在於開頭和結尾的sql語句的實現,對於你的排序的需求,

select row_number() over (order by t.show_count)as row,t.* from
就可以幫你實現根據某個字段進行排序,之後建立乙個臨時表,查詢出臨時表的資料即可,或者說是上方這條sql查詢結果。其實我也發現我這條sql有比較大的問題,後續會進行相應的優化,但是今天是為了記錄sql分頁功能

select * from temptbl where row between # and #
第乙個引數是起始條數,第二個是截止條數,如果**要用到這條語句,那就要用**限制一下。

int pagenums;

int pagesizes;

if (pagenum == null) else

if (pagesize == null || pagesize == 0||pagenum==1) else

如果有比較好的分頁方式,大家可以聯絡我。一起交流學習。

SQL語句基礎(排序,分頁)

desc 降序排序 asc 公升序排序 資料庫表主鍵如果是遞增預設就是公升序,一般都是這樣的 limit後面可以帶乙個值或者兩個值 乙個值 limit n就是返回從開始公升序查詢到的n條資料 兩個值 limit m,n 表示從m位置開始取n條資料,第乙個值表示開始位置,第二個值表示多少條資料。例子 ...

Sql 分頁語句

with temptb as select row number over order by id as rowid,from pagecut select from temptb where rowid between 2 50 and 2 50 50 這是乙個資料分頁方法,從sql2005起就支...

SQL分頁語句

這個分頁方法 sql分頁語句 本人對原作者的方案二做了小小的改動 原語句 select top 頁大小 from table1 where id select isnull max id 0 from select top 頁大小 頁數 1 id from table1 order by id a ...