在 SQL Server 中将行转换为列的 SQL 查询
在本文中,我们将看到如何在 SQL Server 中将行转换为列。在一个表中,许多列对于表中的许多条目具有相同的数据,建议将行转换为列。这将有助于减少表格并使表格更具可读性。
例如,假设我们有一个下表:NAME COLLEGE ROLL NUMBER SUBJECT MARKS ROMY BVP 0261150 DBMS 90 ROMY BVP 0261150 NETWORKING 87 ROMY BVP 0261150 GRAPHICS 95 PUSHKAR MSIT 0898888 DBMS 91 PUSHKAR MSIT 0898888 NETWORKING 90 PUSHKAR MSIT 0898888 GRAPHICS 78
如果我们将此表的数据存储为:NAME COLLEGE ROLL NUMBER DBMS NETWORKING GRAPHICS ROMY BVP 0261150 90 87 95 PUSHKAR MSIT 0898888 91 90 78
我们可以使用 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 聚合函数,因为一个值的平均值就是值本身。
输出:
我们可以看到行被转换为列。