T-SQL 行列转换与分页技巧

本篇探讨 T-SQL 中常用的行转列、列转行以及分页查询的实现方法,并结合存储过程进行封装,提高代码复用性。

行转列

行转列常用于将多行数据合并到一行,以列的形式展现。常见方法包括:

  • 使用 PIVOT 运算符: PIVOT 适用于固定列的情况,能够灵活地根据指定列的值进行聚合。
  • 使用 CASE 表达式和聚合函数: 此方法适用于动态列的情况,通过 CASE 表达式判断条件,结合聚合函数实现行转列。

列转行

列转行与行转列相反,将一行的多列数据转换为多行。常用方法有:

  • 使用 UNPIVOT 运算符: UNPIVOT 是 PIVOT 的逆运算,用于将列值还原为行。
  • 使用 UNION ALL 运算符: 通过多次 UNION ALL 操作,将不同列的数据合并成多行。

分页查询

分页查询用于从大量数据中获取指定页码的数据,常用方法包括:

  • 使用 OFFSET-FETCH 子句: OFFSET 指定跳过的行数,FETCH 指定获取的行数,适用于 SQL Server 2012 及以上版本。
  • 使用 ROW_NUMBER() 函数: ROW_NUMBER() 函数为每行数据生成一个序号,通过 WHERE 条件筛选指定范围的序号实现分页。

存储过程封装

将上述操作封装到存储过程中,可以提高代码的复用性和可维护性。存储过程可以接收参数,例如分页参数、行列转换的条件等,使得代码更加灵活。