首页 > 数据库 >sql server行转列问题

sql server行转列问题

时间:2023-11-04 13:32:28浏览次数:32  
标签:语文 course sid server 转列 2005002 sql 2005001

主要应用case语句来解决行转列的问题

行转列问题主要分为两类

1)简单的行转列问题:

示例表:

id  sid           course  result

1   2005001 语文     80.0
2   2005001 数学     90.0
3   2005001 英语     80.0
4   2005002 语文     56.0
5   2005002 数学     69.0
6   2005002 英语     89.0

执行

select sid,语文=isnull(sum(case course when '语文' then result end),0),
   数学=isnull(sum(case course when '数学' then result end),0),
   英语=isnull(sum(case course when '英语' then result end),0)
   from result 
   group by sid
   order by sid

 

得出结果

sid           语文 数学 英语

2005001 80.0  90.0  80.0
2005002 56.0  69.0  89.0

 

2)较为复杂的行转列

表1:course

id name

1 语文
2 数学
3 英语

表2:result

id sid          course  result

1 2005001 语文      80.0
2 2005001 数学      90.0
3 2005001 英语      80.0
4 2005002 语文      56.0
5 2005002 数学      69.0
6 2005002 英语      89.0

 

declare @sql varchar(8000)
set @sql='select sid'
select @sql=@sql+','+course.name+'=isnull(sum(case course when '''+course.name+''' then result end),0)'
 from course order by id 
set @sql=@sql+' from result group by sid order by sid'
print @sql
exec(@sql)

 

得出结果

sid           语文 数学 英语

2005001 80.0  90.0  80.0
2005002 56.0  69.0  89.0

标签:语文,course,sid,server,转列,2005002,sql,2005001
From: https://blog.51cto.com/u_14682436/8181731

相关文章

  • Mysql为什么存储表数据为什么不能超过2000万行,深度解释 转发 https://www.toutiao.co
    下面是我朋友的面试记录:面试官:讲一下你实习做了什么。朋友:我在实习期间做了一个存储用户操作记录的功能,主要是从MQ获取上游服务发送过来的用户操作信息,然后把这些信息存到MySQL里面,提供给数仓的同事使用。朋友:由于数据量比较大,每天大概有四五千多万条,所以我还给它做了分表的操......
  • C/C++ 使用 MySQL API 操作 数据库
    C/C++对MySQLAPI的使用 MySQL数据库是一个C/S结构(客服端/服务器),当我们安装好MYSQL服务器之后可以通过客户端访问服务器端的数据;这里以C语言提供的API举例实现对数据库的操作;再程序中连接数据库服务器,主要有以下步骤:初始化连接环境;连接mysql的服务器,需......
  • SQLite 多表关联更新
    SQLite多表关联更新更新多字段UPDATEtab1SETfield1=field1||'-',field2=field2+1WHEREID<10或UPDATEtab1SET(field1,field2)=(field1||'-',field2+1)WHEREID<10关联更新普通方式UPDATEtab1SETfield1=(S......
  • MySQL中的COLLATE(COLLATION)是什么?
    CREATETABLE`table1`(`id`bigint(20)unsignedNOTNULLAUTO_INCREMENT,`field1`textCOLLATEutf8_unicode_ciNOTNULLCOMMENT'字段1',`field2`varchar(128)COLLATEutf8_unicode_ciNOTNULLDEFAULT''COMMENT'字段2......
  • 解密MySQL备份恢复的4种方法
    备份高于一切,今天汇总一下常用的几种备份方法,以及恢复的步骤。一、mysqldump在日常工作中,我们会使用mysqldump命令创建SQL格式的转储文件来备份数据库。或者我们把数据导出后做数据迁移,主备搭建等操作。mysqldump是一个逻辑备份工具,复制原始的数据库对象定义和表数据产生一组可......
  • Windows Server2019安装MySQL8.0.32
    安装包下载:https://downloads.mysql.com/archives/community/下载mysql-8.0.32-winx64.zip1、制定目录配置basedir=D:\\mysql8.0.32#mysql数据存放目录datadir=D:\\mysql8.0.32\\data将.zip压缩包解压到D盘,并重命名为mysql8.0.322、编辑my.ini文件[client]#max_a......
  • nuxtjs2.x server 和client的数据共享?
    对于在Nuxt.js中实现服务器和客户端数据共享的需求,你可以考虑使用Vuex来管理共享数据。Vuex是一个专门为Vue.js应用程序开发的状态管理模式。首先,确保你的项目已经安装了Vuex。如果没有安装,你可以使用以下命令进行安装:npminstallvuex创建一个Vuexstore:在你的Nuxt.js项目中,创建......
  • MySQL数据库事务隔离级别、Spring事物传播行为
    MySQL数据库事务隔离级别1什么是事务事务就是保障一系列的操作统一执行,要嘛全部成功,要嘛全部失败。事务由单独单元的一个或多个SQL语句组成,在这个单元中,每个MySQL语句是相互依赖的。而整个单独单元作为一个不可分割的整体,如果单元中某条SQL语句一旦执行失败或产生错误,......
  • mysql知识点
    慢查询定位借助第三方检测工具SkyWalking自研监控系统mysql开启慢查询开启慢查询可能会影响mysql服务器的性能,如果硬盘IO已经是瓶颈的话则影响更为明显。建议做好以下设置:控制日志最大大小定时清理日志使用其他监控工具使用性能监控工具arthas分析......
  • MySQL事务四大特性ACID
    事务:一组操作要么全部成功,要么全部失败,目的是保证数据的一致性。一、事务四大特性ACID(一)原子性(Atomicity)当前事务的操作要么同时成功,要么同时失败。原子性由undolog日志来实现。undolog实现方式当数据库insert一个id=21的数据时,undolog会同时生成一个deleteid=21的sql,当数据......