MSSQL数据库如何将多行数据转换为单列

背景介绍

在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命令来将多行数据转为单列。

数据库标签