SQL Server中行列转换

本文通过具体实例展示了如何使用SQL Server 2000及2005将数据从行列转换为列行,包括创建表格、插入数据以及使用CASE语句和PIVOT函数进行转换的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

典型实例

一、行转列

1、建立表格

ifobject_id('tb')isnotnulldroptabletb

go

createtabletb(姓名varchar(10),课程varchar(10),分数int)

insertintotbvalues('张三','语文',74)

insertintotbvalues('张三','数学',83)

insertintotbvalues('张三','物理',93)

insertintotbvalues('李四','语文',74)

insertintotbvalues('李四','数学',84)

insertintotbvalues('李四','物理',94)

go

select*fromtb

go

姓名       课程       分数

---------- ---------- -----------

张三       语文        74

张三       数学        83

张三       物理        93

李四       语文        74

李四       数学        84

李四       物理        94

 

 

使用SQL Server 2000静态SQL

 

select姓名,

 

max(case课程when'语文'then分数else0end)语文,

 

max(case课程when'数学'then分数else0end)数学,

 

max(case课程when'物理'then分数else0end)物理,

 

sum(分数)总分,

 

cast(avg(分数*1.0)asdecimal(18,2))平均分

 

fromtb

 

groupby姓名

 

 

 

使用SQL Server 2005静态SQL

 

selectm.*,n.总分,n.平均分

 

from

 

(select*fromtb pivot(max(分数)for课程in(语文,数学,物理))a)m,

 

(select姓名,sum(分数)总分,cast(avg(分数*1.0)asdecimal(18,2))平均分

 

fromtb

 

groupby姓名)n

 

wherem.姓名=n.姓名

 

 

 

引用:http://www.cnblogs.com/zhangzt/archive/2010/07/29/1787825.html

 

转载于:https://www.cnblogs.com/xiaonanmu/p/3854099.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值