当前位置: 首页 > 数据应用 > SqlServer

SQL Server行转列的常用方法和技巧

时间:2023-06-28 14:19:03 SqlServer

SQL Server中如何使用PIVOT和UNPIVOT实现行转列和列转行

在SQL Server中,有时我们需要将表中的行数据转换为列数据,或者将列数据转换为行数据,这种操作称为行转列或列转行。SQL Server提供了两个内置的函数来实现这种功能,分别是PIVOT和UNPIVOT。

PIVOT函数可以将表中的某一列的值作为新表的列名,然后根据另一列的值进行分组聚合,从而实现行转列。UNPIVOT函数则是反过来,将表中的多个列名作为新表的一列的值,然后根据另一列的值进行分组展开,从而实现列转行。

下面我们通过一个简单的例子来演示如何使用PIVOT和UNPIVOT函数。

假设我们有一个学生表(Student),记录了每个学生的姓名、科目和成绩,如下所示:

| 姓名 | 科目 | 成绩 |

| 张三 | 语文 | 80 |

| 张三 | 数学 | 90 |

| 张三 | 英语 | 85 |

| 李四 | 语文 | 75 |

| 李四 | 数学 | 95 |

| 李四 | 英语 | 80 |

| 王五 | 语文 | 70 |

| 王五 | 数学 | 80 |

| 王五 | 英语 | 75 |

如果我们想要将科目作为列名,然后显示每个学生在每个科目的成绩,我们可以使用PIVOT函数,如下所示:

SELECT 姓名, [语文], [数学], [英语]

MAX(成绩) -- 聚合函数

FOR 科目 IN ([语文], [数学], [英语]) -- 列名列表

执行上述语句后,我们可以得到如下结果:

| 姓名 | 语文 | 数学 | 英语 |

可以看到,我们成功地将行数据转换为了列数据。