背景介绍
在MSSQL数据库中,有时候需要将多行数据合并成单列。例如,当我们需要将某个表中的多个行合并成一行展示在报表中时,就需要使用到多行转单列的技术。
本文将介绍如何使用T-SQL语句将多行数据转换为单列。
基础知识
行列转换
T-SQL语言提供了PIVOT和UNPIVOT命令来实现行列转换。PIVOT命令将多行数据转为单行,而UNPIVOT则是将单行数据转为多行。这两种命令可以解决很多数据转换的问题,但是在本文中我们将重点介绍如何使用UNPIVOT命令将多行数据转为单列。
UNPIVOT命令
UNPIVOT命令是将多列数据转为一列的命令。在使用时,我们需要先将多列数据转为多行数据,然后在将这些多行数据按照一定规则合并起来。
UNPIVOT命令的基本语法如下:
SELECT
[Column1],
[Value]
FROM
[Table]
UNPIVOT
(
[Value] FOR [Column1] IN ([Column2], [Column3], [Column4])
) AS [UnpivotedTable];
其中,[Column1]是新的列名,[Value]是要合并的列,[Table]是需要转换的表名。[Column2]至[Column4]则是需要转换的列。
多行转单列
准备工作
在开始进行多行转单列之前,我们需要先创建一个测试表。在本文中,我们创建一个名为[Student]的测试表,表中列名和数据如下:
CREATE TABLE [dbo].[Student](
[ID] [int] NULL,
[Name] [nvarchar](50) NULL,
[Subject1] [int] NULL,
[Subject2] [int] NULL,
[Subject3] [int] NULL
) ON [PRIMARY]
GO
INSERT [dbo].[Student] ([ID], [Name], [Subject1], [Subject2], [Subject3]) VALUES (1, N'小明', 85, 90, 95)
INSERT [dbo].[Student] ([ID], [Name], [Subject1], [Subject2], [Subject3]) VALUES (2, N'小红', 70, 85, 80)
INSERT [dbo].[Student] ([ID], [Name], [Subject1], [Subject2], [Subject3]) VALUES (3, N'小李', 90, 95, 92)
INSERT [dbo].[Student] ([ID], [Name], [Subject1], [Subject2], [Subject3]) VALUES (4, N'小张', 80, 73, 86)
INSERT [dbo].[Student] ([ID], [Name], [Subject1], [Subject2], [Subject3]) VALUES (5, N'小刚', 85, 90, 95)
在该测试表中,每行数据表示一个学生的成绩情况。其中,[Subject1]、[Subject2]和[Subject3]分别表示学生的三门课程成绩。
多行转单列
接下来,我们使用UNPIVOT命令将[Subject1]、[Subject2]和[Subject3]三列数据转为一列。具体实现方式如下:
SELECT
[Name],
[Subject],
[Score]
FROM
[Student]
UNPIVOT
(
[Score] FOR [Subject] IN ([Subject1], [Subject2], [Subject3])
) AS [UnpivotedTable];
通过该命令,我们可以得到如下结果:
Name | Subject | Score |
小明 | Subject1 | 85 |
小明 | Subject2 | 90 |
小明 | Subject3 | 95 |
小红 | Subject1 | 70 |
小红 | Subject2 | 85 |
小红 | Subject3 | 80 |
小李 | Subject1 | 90 |
小李 | Subject2 | 95 |
小李 | Subject3 | 92 |
小张 | Subject1 | 80 |
小张 | Subject2 | 73 |
小张 | Subject3 | 86 |
小刚 | Subject1 | 85 |
小刚 | Subject2 | 90 |
小刚 | Subject3 | 95 |
该结果即为我们想要的多行数据转为单列的结果。
总结
在MSSQL数据库中,使用UNPIVOT命令可以将多列数据转为一列。在使用时,我们需要先将多列数据转为多行数据,然后按照一定规则合并起来。本文通过创建测试表和提供示例代码的方式详细介绍了如何使用UNPIVOT命令来将多行数据转为单列。