[SQLServer]数据库行列互换

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介:
面试的时候遇到的数据库SQL问题,没写过,然后研究了一下,现将结果记录下来,方便以后查询。
 
题目1:将表tbltest1的行列互换
 
表结构:
student     kemu  fenshu
student1    语文    80 
student1    数学    90 
student1    英语    85 
student2    语文    85 
student2    数学    92 
student2    英语    82
 
变成:
student  语文    数学   英语
student1   80     90     85 
student2   85     92     82
 
SQLserver的sql语句:
declare @sql  varchar(4000)  
set @sql =  'select student'  
select @sql = @sql +  ',sum(case kemu when ' ''+ kemu + '' ' then fenshu else 0 end)['+ kemu+ ']' 
   from ( select  distinct kemu  from tbltest1)  as a  
set @sql = @sql +  ' from tbltest1 group by student'  
exec(@sql)
或者
select student, sum( case kemu  when  '语文'  then fenshu  else 0  end) 语文, sum( case kemu  when  '数学'  then fenshu  else 0  end) 数学, sum( case kemu  when  '英语'  then fenshu  else 0  end) 英语  from tbltest  group  by student
 
注:个人觉得上面的好。如果一两个选项可以使用下面的sql,如果选项多上面的sql就显的方便的多。
 
2005的话好像还有个函数可以用,等研究好了再发上来。
 
题目2:合并
 
表结构tbltest2:
id strings
1   my 
1   name
1   is
1   xudayu
2   hello
2   world
 
转化成:
id   strings
 1   my name is xudayu 
 2   hello world 
 
SQLServer的sql语句:
 
--创建一个合并的函数  
create function fliehebin(@id  int)  
returns  varchar(5000)  
as  
begin  
declare @ str  varchar(5000)  
set @ str= ''  
select @ str=@ str +  cast(strings  as  varchar(50)) + ' '  from tbltest2  where id=@id  
set @ str= subString(@ str,1, len(@ str))  
return(@ str)  
end  
go  
--调用自定义函数得到结果 
select  distinct id,dbo.fliehebin(id)  from tbltest2
 
Mysql没研究,其他数据库,如Oracle的因为没有环境研究不了,哪位会的,回复上来呀!


本文转自xudayu 51CTO博客,原文链接:http://blog.51cto.com/xudayu/84355,如需转载请自行联系原作者

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
2月前
|
SQL 数据库
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
SQL Server附加数据库出现错误823,附加数据库失败。数据库没有备份,无法通过备份恢复数据库。 SQL Server数据库出现823错误的可能原因有:数据库物理页面损坏、数据库物理页面校验值损坏导致无法识别该页面、断电或者文件系统问题导致页面丢失。
103 12
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
|
13天前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第8天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统准备、配置安装源、安装 SQL Server 软件包、运行安装程序、初始化数据库以及配置远程连接。通过这些步骤,您可以顺利地在 CentOS 系统上部署和使用 SQL Server 2019。
|
14天前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第7天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统要求检查与准备、配置安装源、安装 SQL Server 2019、配置 SQL Server 以及数据库初始化(可选)。通过这些步骤,你可以成功安装并初步配置 SQL Server 2019,进行简单的数据库操作。
|
28天前
|
存储 数据挖掘 数据库
数据库数据恢复—SQLserver数据库ndf文件大小变为0KB的数据恢复案例
一个运行在存储上的SQLServer数据库,有1000多个文件,大小几十TB。数据库每10天生成一个NDF文件,每个NDF几百GB大小。数据库包含两个LDF文件。 存储损坏,数据库不可用。管理员试图恢复数据库,发现有数个ndf文件大小变为0KB。 虽然NDF文件大小变为0KB,但是NDF文件在磁盘上还可能存在。可以尝试通过扫描&拼接数据库碎片来恢复NDF文件,然后修复数据库。
|
2月前
|
SQL 关系型数据库 MySQL
创建包含MySQL和SQLServer数据库所有字段类型的表的方法
创建一个既包含MySQL又包含SQL Server所有字段类型的表是一个复杂的任务,需要仔细地比较和转换数据类型。通过上述方法,可以在两个数据库系统之间建立起相互兼容的数据结构,为数据迁移和同步提供便利。这一过程不仅要考虑数据类型的直接对应,还要注意特定数据类型在不同系统中的表现差异,确保数据的一致性和完整性。
35 4
|
2月前
|
SQL 存储 数据管理
SQL Server数据库
SQL Server数据库
59 11
|
2月前
|
SQL 安全 数据库
基于SQL Server事务日志的数据库恢复技术及实战代码详解
基于事务日志的数据库恢复技术是SQL Server中一个非常强大的功能,它能够帮助数据库管理员在数据丢失或损坏的情况下,有效地恢复数据。通过定期备份数据库和事务日志,并在需要时按照正确的步骤恢复,可以最大限度地减少数据丢失的风险。需要注意的是,恢复数据是一个需要谨慎操作的过程,建议在执行恢复操作之前,详细了解相关的操作步骤和注意事项,以确保数据的安全和完整。
123 0
|
14天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
29 1
|
16天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
29 4
|
23天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
112 1
下一篇
无影云桌面