将列值旋转成列名(即行到列)是我们在开发中经常遇到的一个需求。本文主要介绍了在sql语句中实现行列转换的三种方法,并分别给出了详细的示例代码。有需要的朋友可以参考参考。让我们一起学习。
前言
一般做数据统计的时候会用到行对列。如果要统计学生的成绩,数据库里的查询会是这样的,但是达不到预期的效果,所以查询的时候要做一些处理。下面就不多说了。下面我们一起来看看详细的介绍。
创建表测试表(
[Id] [int] IDENTITY(1,1)不为空,
[用户名] [nvarchar](50)空,
[Subject] [nvarchar](50) NULL,
[源][数字](18,0)空
)开[主]
去
插入到测试表([用户名]、[主题]、[来源])
选择N个'张三',N个'中国人',60个工会全部
选'李四',n '数学',70联全
选择‘王五’,n个‘英语’,80个全联盟
选择'王五',n '数学',75联全
选择“王五”,n个“语言”,57个联盟全部
选择N '李四',N '中国人',80工会全部
选择'张三',n '英语',100
去
在这里,我用三种方法来实现行到列的第一种方法:静态行到列。
选择用户名,
Sum(格主语当'语言'然后源else 0 end)语言,sum(格主语当'数学'然后源else 0 end)数学,
sum(case Subject when ' English ' then Source else 0 end)来自TestTable group by UserName的英语
用视点线转换列
select * from
(从testtable中选择用户名、主题、来源)test pivot(sum(source)for subject in(中文、数学、英语)
)pvt
用存储过程行转换列。
更改过程pro_test
@userImages varchar(200),
@Subject varchar(20),
@Subject1 varchar(200),
@TableName varchar(50)
如同
declare @ SQL varchar(max)=' select * from(select ' @ user images ' from ' @ TableName ')选项卡
在枢轴上转动
(
主题(“@Subject1”)的sum(“@ Subject”)
)pvt '
exec (@sql)
去
exec pro_test '用户名,主题,来源',
测试表',
主题',
'语文,数学,英语'
他们的效果都是这样的。
以上三种实现行列转换的方法,我们可以根据自己的需要采用不同的方法。
总结
这就是本文的全部内容。希望这篇文章的内容对你的学习或工作有一定的参考价值。有问题可以留言交流。谢谢你的支持。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。