将列值旋转成列名(即行到列)是我们在开发中经常遇到的一个需求。本文主要介绍了在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 用户名,主题,来源,
测试表,
主题,
语文,数学,英语
他们的效果都是这样的。
以上三种实现行列转换的方法,我们可以根据自己的需要采用不同的方法。
总结
这就是本文的全部内容。希望这篇文章的内容对你的学习或工作有一定的参考价值。有问题可以留言交流。谢谢你的支持。