sql语句如何实现行转列
这篇文章将为大家详细讲解有关sql语句如何实现行转列,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
前言
一般在做数据统计的时候会用到行转列,假如要统计学生的成绩,数据库里查询出来的会是这样的,但这并不能达到想要的效果,所以要在查询的时候做一下处理,下面话不多说了,来一起看看详细的介绍。
CREATETABLETestTable([Id][int]IDENTITY(1,1)NOTNULL,[UserName][nvarchar](50)NULL,[Subject][nvarchar](50)NULL,[Source][numeric](18,0)NULL)ON[PRIMARY]goINSERTINTOTestTable([UserName],[Subject],[Source])SELECTN'张三',N'语文',60UNIONALLSELECTN'李四',N'数学',70UNIONALLSELECTN'王五',N'英语',80UNIONALLSELECTN'王五',N'数学',75UNIONALLSELECTN'王五',N'语文',57UNIONALLSELECTN'李四',N'语文',80UNIONALLSELECTN'张三',N'英语',100GO
这里我用了三种方法来实现行转列第一种:静态行转列
selectUserName姓名,sum(caseSubjectwhen'语文'thenSourceelse0end)语文,sum(caseSubjectwhen'数学'thenSourceelse0end)数学,sum(caseSubjectwhen'英语'thenSourceelse0end)英语fromTestTablegroupbyUserName
用povit行转列
select*from(selectUserName,Subject,SourcefromTestTable)testpivot(sum(Source)forSubjectin(语文,数学,英语))pvt
用存储过程行转列
alterprocpro_test@userImagesvarchar(200),@Subjectvarchar(20),@Subject1varchar(200),@TableNamevarchar(50)asdeclare@sqlvarchar(max)='select*from(select'+@userImages+'from'+@TableName+')tabpivot(sum('+@Subject+')forSubject('+@Subject1+'))pvt'exec(@sql)goexecpro_test'UserName,Subject,Source','TestTable','Subject','语文,数学,英语'
它们的效果都是这样的
以上三种方式实现行转列,我们可以根据自己的需求采用不同的方法
关于“sql语句如何实现行转列”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。