时间:2021-05-23
前言
一般在做数据统计的时候会用到行转列,假如要统计学生的成绩,数据库里查询出来的会是这样的,但这并不能达到想要的效果,所以要在查询的时候做一下处理,下面话不多说了,来一起看看详细的介绍。
CREATE TABLE TestTable( [Id] [int] IDENTITY(1,1) NOT NULL, [UserName] [nvarchar](50) NULL, [Subject] [nvarchar](50) NULL, [Source] [numeric](18, 0) NULL) ON [PRIMARY]goINSERT INTO TestTable ([UserName],[Subject],[Source]) SELECT N'张三',N'语文',60 UNION ALL SELECT N'李四',N'数学',70 UNION ALL SELECT N'王五',N'英语',80 UNION ALL SELECT N'王五',N'数学',75 UNION ALL SELECT N'王五',N'语文',57 UNION ALL SELECT N'李四',N'语文',80 UNION ALL SELECT N'张三',N'英语',100GO这里我用了三种方法来实现行转列第一种:静态行转列
select UserName 姓名,sum(case Subject when '语文' then Source else 0 end) 语文,sum(case Subject when '数学' then Source else 0 end) 数学,sum(case Subject when '英语' then Source else 0 end) 英语 from TestTable group by UserName用povit行转列
select * from (select UserName,Subject,Source from TestTable) testpivot(sum(Source) for Subject in(语文,数学,英语)) pvt用存储过程行转列
alter proc pro_test@userImages varchar(200),@Subject varchar(20),@Subject1 varchar(200),@TableName varchar(50)as declare @sql varchar(max)='select * from (select '+@userImages+' from'+@TableName+') tabpivot(sum('+@Subject+') for Subject('+@Subject1+')) pvt'exec (@sql)goexec pro_test 'UserName,Subject,Source','TestTable','Subject','语文,数学,英语'它们的效果都是这样的
以上三种方式实现行转列,我们可以根据自己的需求采用不同的方法
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了cakephp打印sql语句的方法。分享给大家供大家参考。具体实现方法如下:将以下语句复制到你的代码中,可以打印出在这之前所有的sql语句:$so
本文实例讲述了thinkPHP简单实现多个子查询语句的方法。分享给大家供大家参考,具体如下:sql语句博大精深理解好sql语句,就能用好thinkphp等框架中
本文实例讲述了PHP实现SQL语句格式化功能的方法。分享给大家供大家参考,具体如下:一、问题:要求使用php实现针对sql语句的格式化功能二、解决方法:这里使用
本文实例讲述了C#实现SQL批量插入数据到表的方法。分享给大家供大家参考,具体如下:#region帮助实例:SQL批量插入数据多种方法//////SqlBulk
mybatis中分页有3种方式来实现,通过sql语句(两种传参方式)来实现,通过mybatis的Rowbounds来实现。通过(自定义类型)传参来实现分页:映射