SQL SERVER 行转列 PIVOT 用法及解释

本文介绍了在SQL Server中如何进行行转列查询,包括PIVOT语法、常用的聚合函数及其示例。通过PIVOT或CASE语句,可以将数据表中的行数据转换为列显示,例如展示学生姓名及他们的数学、语文、英语成绩。示例中创建了Student表并插入数据,然后展示了两种不同的查询方法,实现了按学生名字列出各科成绩。
摘要由CSDN通过智能技术生成

    在数据库操作过程中,偶尔会使用到《行转列》查询;下面介绍Sql server 中常用的行转列操作;

1.语法

    PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现

    PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P

完整语法:

table_source

PIVOT( 

聚合函数(value_column)FOR pivot_column  IN (<column_list>)

)

2.聚合函数

排序函数
1

AVG 平均值

2

MIN 最小值

3

MAX 最大值

4

SUM 求和值

5

count(count_big)统计项数值

6

STDEV 计算标准偏差值

7

VAR 计算方差

8CHECKSUM_AGG
9COUNT_BIG
10STDEVP
11GROUPING 
12GROUPING_ID
13VARP

 

3.举例

2.1创建一张Student 表:​​​​​​

CREATE TABLE Student(  [Name] [nvarchar](50) NULL,  [Sex] [nvarchar](10) NULL,  [Age] [nvarchar](50) NULL,  [Grade] [nvarchar](50) NULL,  [Clasee] [nvarchar](50) NULL,  [Score] [decimal](18, 2) NULL,)

2.2 插入数据

    ​​​​

INSERT Student(Name,Sex,Age,Grade,Clasee,Score)VALUES('小红','女','12','5','数学','90'),('小红','女','12','5','语文','89'),('小红','女','12','5','英语','95'),('小蓝','男','13','5','数学','93'),('小蓝','男','13','5','语文','87'),('小蓝','男','13','5','英语','92'),('小花','女','11','5','英语','91'),('小花','女','11','5','数学','85'),('小花','女','11','5','语文','92')

2.3 按行查询学生名字,列举出 数学,语文,英语成绩

    方法1:使用 PIVOT

SELECT * FROM(SELECT Name,Clasee,Score FROM Student ) APIVOT (MAX(Score) FOR Clasee IN ([数学],[语文],[英语])) B

   

图片

 方法2:使用CASE​​​​​​​

SELECT Name,MAX(CASE WHEN Clasee='数学' THEN Score ELSE 0 END) AS [数学],MAX(CASE WHEN Clasee='语文' THEN Score ELSE 0 END) AS [语文],MAX(CASE WHEN Clasee='英语' THEN Score ELSE 0 END) AS [英语]FROM StudentGROUP BY NAME

图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值