Access开发培训
网站公告
·Access专家课堂QQ群号:151711184    ·Access快速开发平台下载地址及教程    ·欢迎加入Access专家课堂微信群!    ·如何快速搜索本站文章|示例|资料    
您的位置: 首页 > 技术文章 > Access数据库-查询/SQL语句

sql语句实现行转列的3种方法实例

时 间:2018-02-21 09:54:58
作 者:宏鹏   ID:21115  城市:上海
摘 要:将列值旋转为列名(即行转列)是我们在开发中经常会遇到的一个需要,下面这篇文章主要给大家介绍了关于sql语句实现行转列的3种方法,分别给出了详细的示例代码,需要的朋友可以参考借鉴,下面来一起学习学习吧。
正 文:

前言

一般在做数据统计的时候会用到行转列,假如要统计学生的成绩,数据库里查询出来的会是这样的,但这并不能达到想要的效果,所以要在查询的时候做一下处理,下面话不多说了,来一起看看详细的介绍。

         

CreateTABLETestTable(
 [Id] [int] IDENTITY(1,1)NOTNULL,
 [UserName] [nvarchar](50)NULL,
 [Subject] [nvarchar](50)NULL,
 [Source] [numeric](18, 0)NULL
)ON[PRIMARY]
go
InsertINTOTestTable ([UserName],[Subject],[Source])
 SelectN'张三',N'语文',60UNIONALL
 SelectN'李四',N'数学',70UNIONALL
 SelectN'王五',N'英语',80UNIONALL
 SelectN'王五',N'数学',75UNIONALL
 SelectN'王五',N'语文',57UNIONALL
 SelectN'李四',N'语文',80UNIONALL
 SelectN'张三',N'英语',100
GO

这里我用了三种方法来实现行转列第一种:静态行转列

selectUserName 姓名,
sum(caseSubjectwhen'语文'thenSourceelse0end) 语文,sum(caseSubjectwhen'数学'thenSourceelse0end) 数学,
sum(caseSubjectwhen'英语'thenSourceelse0end) 英语fromTestTablegroupbyUserName

用povit行转列

select*from
(selectUserName,Subject,SourcefromTestTable) testpivot(sum(Source)forSubjectin(语文,数学,英语)
) pvt

用存储过程行转列

alterproc pro_test
@userImagesvarchar(200),
@Subjectvarchar(20),
@Subject1varchar(200),
@TableNamevarchar(50)
as
 declare@sqlvarchar(max)='select * from (select '+@userImages+' from'+@TableName+') tab
pivot
(
sum('+@Subject+') for Subject('+@Subject1+')
) pvt'
exec(@sql)
go
execpro_test'UserName,Subject,Source',
'TestTable',
'Subject',
'语文,数学,英语'

它们的效果都是这样的

以上三种方式实现行转列,我们可以根据自己的需求采用不同的方法



Access软件网QQ交流群 (群号:483923997)       Access源码网店

常见问答:

技术分类:

相关资源:

专栏作家

关于我们 | 服务条款 | 在线投稿 | 友情链接 | 网站统计 | 网站帮助