Sqlserver 常用Sql语句
分页(两次查询)
-- 查询总计数量 SELECT COUNT(*) AS TotalCount FROM YourTable WHERE conditions; -- 分页查询 SELECT YourColumns FROM YourTable WHERE conditions ORDER BY YourOrderingColumns OFFSET @PageSize * (@PageNumber - 1) ROWS FETCH NEXT @PageSize ROWS ONLY;
窗口函数实现分页
常见的窗口函数包括 ROW_NUMBER(), RANK(), DENSE_RANK(), NTILE(), LAG(), LEAD() 等等。
1 SELECT *, 2 COUNT(*) OVER () AS TotalCount 3 FROM YourTable 4 WHERE conditions 5 ORDER BY YourOrderingColumns 6 OFFSET @PageSize * (@PageNumber - 1) ROWS 7 FETCH NEXT @PageSize ROWS ONLY;
-
ROW_NUMBER(): 为结果集中的每一行分配一个唯一的整数值,按照指定的排序顺序进行分配。如果有相同的排序值,则每行都会被分配一个不同的行号。SELECT ROW_NUMBER() OVER (ORDER BY Salary DESC) AS RowNumber, FirstName, LastName, Salary FROM Employees; -
RANK(): 为结果集中的每一行分配一个排名,如果有相同的排序值,则会跳过相同的排名,下一个排名会增加相应数量的行数SELECT RANK() OVER (ORDER BY Salary DESC) AS Rank, FirstName, LastName, Salary FROM Employees; -
DENSE_RANK(): 为结果集中的每一行分配一个密集排名,相同的排序值会得到相同的排名,但是排名不会跳过。SELECT DENSE_RANK() OVER (ORDER BY Salary DESC) AS DenseRank, FirstName, LastName, Salary FROM Employees; -
NTILE(): 将结果集划分为指定数量的桶(buckets),并为每个桶中的行分配一个标识号。通常用于等分数据集。SELECT NTILE(4) OVER (ORDER BY Salary DESC) AS Quartile, FirstName, LastName, Salary FROM Employees; -
LAG(): 用于访问前一行的数据。SELECT FirstName, LastName, Salary, LAG(Salary, 1) OVER (ORDER BY Salary) AS PreviousSalary FROM Employees; -
LEAD(): 用于访问后一行的数据。SELECT FirstName, LastName, Salary, LEAD(Salary, 1) OVER (ORDER BY Salary) AS NextSalary FROM Employees;

浙公网安备 33010602011771号