📜  在 SQL Server 中将行转换为列的 SQL 查询

📅  最后修改于: 2022-05-13 01:55:24.166000             🧑  作者: Mango

在 SQL Server 中将行转换为列的 SQL 查询

在本文中,我们将看到如何在 SQL Server 中将行转换为列。在一个表中,许多列对于表中的许多条目具有相同的数据,建议将行转换为列。这将有助于减少表格并使表格更具可读性。

例如,假设我们有一个下表:

NAMECOLLEGEROLL NUMBERSUBJECTMARKS
ROMYBVP0261150DBMS90
ROMYBVP0261150NETWORKING87
ROMYBVP0261150GRAPHICS95
PUSHKARMSIT0898888DBMS91
PUSHKARMSIT0898888NETWORKING90
PUSHKARMSIT0898888GRAPHICS78

如果我们将此表的数据存储为:

NAMECOLLEGEROLL NUMBERDBMSNETWORKINGGRAPHICS
ROMYBVP0261150908795
PUSHKARMSIT0898888919078

我们可以使用 SQL 中的PIVOT函数将行转换为列。

句法:

SELECT (ColumnNames)  
FROM (TableName)  
PIVOT
(  
  AggregateFunction(ColumnToBeAggregated)
  FOR PivotColumn IN (PivotColumnValues)
) AS (Alias);                                   
 //Alias is a temporary name for a table
  

出于演示的目的,我们将在名为“geeks”的数据库中创建一个 demo_table。

第 1 步:创建数据库

使用以下 SQL 语句创建一个名为 geeks 的数据库。

询问:

CREATE DATABASE geeks;

第 2 步:使用数据库

使用以下 SQL 语句将数据库上下文切换到极客。

询问:

USE geeks;

第三步:表定义

我们的极客数据库中有以下 demo_table。

询问:

CREATE TABLE demo_table(
NAME varchar(30),
COLLEGE varchar(30),
EXAM_DATE DATE,
SUBJECTS varchar(30),
MARKS int);

第 4 步:将数据插入表中

询问:

INSERT INTO demo_table VALUES ('ROMY', 'BVCOE', 
'12-OCT-2021', 'DBMS', 90),
('ROMY', 'BVCOE', '12-OCT-2021', 'NETWORKING', 90),
('ROMY', 'BVCOE', '12-OCT-2021', 'GRAPHICS', 100),
('ROMY', 'BVCOE', '12-OCT-2021', 'CHEMISTRY', 98),
('ROMY', 'BVCOE', '12-OCT-2021', 'MATHEMATICS', 78),
('PUSHKAR', 'MSIT', '14-OCT-2021', 'NETWORKING' , 97),
('PUSHKAR', 'MSIT', '14-OCT-2021', 'GRAPHICS', 98),
('PUSHKAR', 'MSIT', '14-OCT-2021', 'CHEMISTRY', 79),
('PUSHKAR', 'MSIT', '14-OCT-2021', 'MATHEMATICS', 79),
('PUSHKAR', 'MSIT', '14-OCT-2021', 'DBMS', 79);

第五步:查看表格内容

使用以下命令查看 demo_table 的内容:

询问:

SELECT * FROM demo_table;

输出:

第 6 步:使用数据透视函数将行转换为列。

询问:

SELECT * FROM demo_table  
 PIVOT
(AVG(MARKS) FOR SUBJECTS IN (DBMS,NETWORKING, 
GRAPHICS, CHEMISTRY, MATHEMATICS)) AS PivotTable;

我们使用了 AVERAGE 聚合函数,因为一个值的平均值就是值本身。

输出:

我们可以看到行被转换为列。