簡體   English   中英

sql 服務器中的分頁用於頂級查詢

[英]Paging in sql server for top level query

在 sql 服務器中,我有一個 Employee 表和一個 Address 表。
一個員工可以有多個地址。
我想獲取前 10 名員工及其地址。

SELECT * 
FROM
  Employee e 
  LEFT JOIN Address a ON a.EmployeeID = e.Id
WHERE
  a.Street LIKE '%a%'
  AND e.Name LIKE '%bob%'
ORDER BY e.Id 
OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY

如果每個員工都有 2 個與之關聯的地址,我將得到 10 行但只有 5 個員工。
如何獲得我想要的 10 名員工?

您可以使用dense_rank()

SELECT ea.*
FROM (SELECT e.*, a.*,  -- should select the columns you really need
             DENSE_RANK() OVER (ORDER BY e.id) as seqnum
      FROM Employee e  JOIN
           Address a
           ON a.EmployeeID = e.Id
      WHERE a.Street LIKE '%a%' AND e.Name LIKE '%bob%'
     ) ea
WHERE seqnum <= 10
ORDER BY e.Id ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM