SQL基础:Sql Server中实现行数据转为列显示

背景介绍

在Sql Server中,有时候需要将行数据转化为列进行展示,这个过程叫做“数据透视”。

通俗地说,数据透视就是将一些相同类型的行数据按照某个特定字段进行合并,并展示为一列数据。这种数据展示方式相比于原来的行数据来说更加清晰易读。

下面我将介绍如何使用Sql Server实现行数据转列显示。

数据透视方法一:使用Pivot函数

1. Pivot函数使用示例

Pivot函数就是为了实现数据透视而生的,下面是一个简单的示例:

CREATE TABLE #Temp

(

[Name] VARCHAR(50),

[Score] INT,

[Course] VARCHAR(50)

)

INSERT INTO #Temp

VALUES ('Adam', 93, 'Math'),

('Adam', 88, 'English'),

('Bob', 91, 'Math'),

('Bob', 89, 'English')

SELECT *

FROM #Temp

SELECT [Name], [Math], English

FROM

(

SELECT [Name], [Course], [Score]

FROM #Temp

) AS SourceTable

PIVOT

(

AVG([Score])

FOR [Course] IN ([Math], [English])

) AS PivotTable;

以上示例演示了如何将行数据转为列显示,Pivot函数的语法如下:

PIVOT

(

{ aggfunc (value_column_name) }

FOR column_to_pivot

IN ( column_list )

) AS alias

其中,aggfunc是聚合函数,value_column_name是需要聚合的字段名称,column_to_pivot是需要进行透视的字段名称,column_list是需要展示的列名列表,alias是透视后结果集的别名。

2. Pivot函数实现数据透视的注意事项

在使用Pivot函数实现数据透视的时候,有几点需要注意:

需要先将需要进行透视的字段进行聚合

需要使用固定列名展示透视后的结果集

如果需要将多个字段进行透视,需要使用多个Pivot函数

数据透视方法二:使用Case语句

1. Case语句使用示例

使用Case语句实现数据透视的方法相对于Pivot函数稍微麻烦一些,但也很实用,以下是一个使用Case语句实现数据透视的示例:

CREATE TABLE #Temp

(

[Name] VARCHAR(50),

[Score] INT,

[Course] VARCHAR(50)

)

INSERT INTO #Temp

VALUES ('Adam', 93, 'Math'),

('Adam', 88, 'English'),

('Bob', 91, 'Math'),

('Bob', 89, 'English')

SELECT *

FROM #Temp

SELECT [Name],

MAX(CASE WHEN Course = 'Math' THEN Score END) AS [Math],

MAX(CASE WHEN Course = 'English' THEN Score END) AS [English]

FROM #Temp

GROUP BY [Name];

以上示例演示了如何使用Case语句实现数据透视,使用Case语句实现数据透视的语法如下:

SELECT [Field], 

MAX(CASE WHEN [Criteria] THEN [Value] END) AS [ColumnAliases]

FROM [Table]

GROUP BY [Field]

其中,Field是需要分组的字段名称,Criteria是需要判断的条件,Value是需要展示的值。

2. Case语句实现数据透视的注意事项

在使用Case语句实现数据透视的时候,有几点需要注意:

需要使用固定的列名展示透视后的结果集

需要使用Group By语句进行分组

总结

以上就是在Sql Server中实现行数据转为列显示的两种方式。其中,Pivot函数相对于Case语句来说,更加简洁明了,但是如果需要透视多个字段时,需要使用多个Pivot函数。而Case语句相对来说,更加灵活,适用于透视单个字段的情况。

不管是哪一种方法,都需要在展示透视后数据时使用固定的列名。使用行数据转列显示的方法,可以让数据更加清晰易读,提高数据分析的效率。

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

数据库标签