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

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

数据库标签