SqlServer行转列方法

这篇具有很好参考价值的文章主要介绍了SqlServer行转列方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数据库建表

create table student 
(id int identity(1,1) primary key,
name nvarchar(20),
subject_id int,
score int,
grade varchar(10)
)

insert into student(name,subject_id,score,grade)values('张三',1,90,'A')
insert into student(name,subject_id,score,grade)values('张三',2,75,'B')
insert into student(name,subject_id,score,grade)values('李四',1,70,'B')
insert into student(name,subject_id,score,grade)values('李四',2,88,'B')
insert into student(name,subject_id,score,grade)values('王五',1,65,'C')
insert into student(name,subject_id,score,grade)values('王五',2,65,'C')

select * from student

sqlserver行转列,# DB_SqlServer,sqlserver,数据库,sql

1 使用聚合函数巧妙解决,可以用max、sum等

select name,
	max(case when subject_id=1 then score else 0 end) as Chinese,
	max(case when subject_id=2 then score else 0 end) as math
from student 
group by name

sqlserver行转列,# DB_SqlServer,sqlserver,数据库,sql

2 使用pivot函数

select name,
	max([1]) as Chinese,
	max([2]) as math
from student  pivot(max(score) for subject_id in ([1],[2]))t
group by name

sqlserver行转列,# DB_SqlServer,sqlserver,数据库,sql
3.行转列,多列,参考

--1
select name,
	max(case when subject_id=1 then score else 0 end) as Chinese,
	max(case when subject_id=1 then grade else null end) as Chinese_g,
	max(case when subject_id=2 then score else 0 end) as math,
    max(case when subject_id=2 then grade else null end) as math_g
from student 
group by name;
--2
with A as 
(select name,
	max([1]) as Chinese,
	max([2]) as math
from student  
pivot(max(score) for subject_id in ([1],[2])
)t
group by name),
B as(
select name,
	max([1]) as Chinese_g,
	max([2]) as math_g
from student  
pivot(max(grade) for subject_id in ([1],[2])
)t
group by name)
select a.name,Chinese,Chinese_g,math,math_g from  A,B where A.name=b.name 
--3
select name,Chinese,max([1]) as Chinese_g,math,max([2]) as math_g
	from student 
	inner join 
	(select name as namea,max([1]) as Chinese,max([2]) as math from student  
	pivot(max(score) for subject_id in ([1],[2]))t 
	group by name) st on student.name=st.namea
	pivot(max(grade) for subject_id in ([1],[2]))ss
 group by name,Chinese,math

sqlserver行转列,# DB_SqlServer,sqlserver,数据库,sql文章来源地址https://www.toymoban.com/news/detail-611505.html

到了这里,关于SqlServer行转列方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 搞定mysql的 行转列(7种方法) 和 列转行

    一、行转列 1、使用case…when…then  2、使用SUM(IF()) 生成列 3、使用SUM(IF()) 生成列 + WITH ROLLUP 生成汇总行 4、使用SUM(IF()) 生成列,直接生成汇总结果,不再利用子查询 5、使用SUM(IF()) 生成列 + UNION 生成汇总行,并利用 IFNULL将汇总行标题显示为 Total 6、动态查询列值不确定的情况

    2024年03月12日
    浏览(53)
  • mysql和sqlserver查询数据库表的数量的方法

    一、mysql查询数据库表的数量 1、查询mysql下所有数据库表的数量 2、查询指定数据库的表的数量   二、sqlserver查询数据库表的数量 1、查询指定数据库的表的数量(选择指定的sqlserver数据库后再执行语句) 2、xtype 的描述 (1)数据类型:char(2)。  (2)对象类型。常用列。

    2024年02月07日
    浏览(47)
  • Debezium系列之:详细介绍Debezium2.X版本导出Sqlserver数据库Debezium JMX指标的方法

    Debezium2.X版本sqlserver数据库JMX指标导出的方式与Debezium1.X版本不同 需要根据Debezium2.X版本sqlserver数据库jmx的格式,导出sqlserver数据库的JMX指标

    2024年02月01日
    浏览(50)
  • 【SQLServer】sqlserver数据库导入oracle

    将sqlserver数据库导入到oracle 实用工具: SQL Server Management Studio 15.0.18424.0 SQL Server 管理对象 (SMO) 16.100.47021.0+7eef34a564af48c5b0cf0d617a65fd77f06c3eb1 Microsoft Analysis Services 客户端工具 15.0.19750.0 Microsoft 数据访问组件 (MDAC) 10.0.19041.2486 Microsoft MSXML 3.0 4.0 6.0 Microsoft .NET Framework 4.0.30319.42000 操

    2024年02月09日
    浏览(59)
  • 数据库实训sqlserver

    一、数据库设计题 1、以“library”为名称创建一个数据库。该数据库中包含一个主数据文件tsdata.mdf,存放路径为“d:data”;一个事务日志文件tslog.ldf,存放路径为“d:data”。其他设置自定。  2、在上题创建好的数据库中,按如下要求创建三张表。 表1 书籍表:用来存储书

    2024年02月09日
    浏览(48)
  • SQLServer 数据库之锁

    SQL Server 数据库支持多个用户同时访问数据库,但当用户同时访问数据库时,就会造成 并发问题 ,锁的机制能很好地解决这个问题,保证数据的完整性和一致性; SQL Server 自带锁机制,若是简单的数据库访问机制,完全能满足用户的需求;但对于数据完全与数据完整性有特殊

    2024年02月13日
    浏览(52)
  • sqlserver数据库错误码

    错误 严重性 是否记录事件 说明 -2 超时时间已到。 超时时间在操作完成或服务器没有响应之前已过。 (Microsoft SQL Server,错误: -2)。 -1 在建立与服务器的连接时出错。 连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接,这可能会导致此失败。 (提供程序:

    2024年02月05日
    浏览(123)
  • SQLServer数据库备份与还原

            Microsoft SQL Server Management Studio,顾名思义,是微软 SQL Server的管理工具,说白了,就是微软官方管理自家数据库的软件。可以对数据库和表操作,本章我们用到它强悍的备份和还原功能。       (1)  选中需要备份的数据库,右键选择备份   (2)添加目标 (3)此

    2024年02月13日
    浏览(48)
  • SqlServer 快速数据库脚本迁移

    做工业的,经常遇到内网的项目,就是数据往本地的数据库传。由于这个问题所以我们需要新建一个数据库。最合适的就是数据库脚本迁移。 高级 操作完成 生成模板数据库 生成表结构 生成表数据(因为有些配置数据是写在数据库里面的) 导出模板数据库脚本 生成的脚本语

    2024年02月12日
    浏览(46)
  • Python连接SQLserver数据库

    前进四的状态出发! 学习Python 连接 数据库 解决问题: 1:如何连接数据库 2:如何进行简单查询 3:如何将查询中的中文乱码给修复 4:如何进行插入,更新,删除 主要在pymssql.connect 中添加charset = ‘cp936’ 原因:因为字符串字段类型为:varchar,造成读取数据乱码。 方法一的缺点: 如果

    2024年02月02日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包