SQL Server 獲取滿足條件的每個條件下的前N條數據


從數據庫獲取數據時,經常會遇到獲取一個數據列表和該列表中每條數據對應的另一個列表的情況,如果二級列表獲取的是全部數據,那么就比較簡單。如果二級列表獲取的是前n條數據,就會比較麻煩。

從操作上來看,好像很簡單,可以先從數據庫獲取一級列表,然后遍歷,根據指定條件再次獲取二級列表。但是,這樣會多次連接數據庫,嚴重影響從數據庫獲取數據的效率。從效率上考慮,最好是一次全部獲取,這時候可以考慮使用分區函數PARTITION BY。

語法:

ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)

該語法表示根據COL1分組,在分組內部根據 COL2排序,而此語法計算的值就表示每組內部排序后的順序編號(組內連續、唯一)

示例:

類別表:t_classinfo

          classid  classname 

            1         服飾

            2         箱包

商品信息表:t_goodsinfo

 goodsid  goodsname  classid   ordernum

     1           上衣            1            1

     2           帽子            1            2

     3           褲子            1            3

     4           皮夾            2            1

     5           錢包            2            2

     6           皮帶            2            3

獲取類別列表和每個類別下的兩個商品信息

sql 語句:

select * from t_classinfo

select * from (select  goodsid,goodsname,(ROW_NUMBER() OVER(PARTITION BY classid ORDER BY ordernum desc)) as rowid
        from t_goodsinfo) as g
where g.rowid<=2
order by classid asc

查詢結果:

classid  classname 

   1         服飾

   2         箱包

 

 goodsid  goodsname  rowid 

     3           褲子            1 

     2           帽子            2 

     6           皮帶            1 

     5           錢包            2 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM