SQL数据库数据转换:从行到列的行列转换技巧
创始人
2024-12-22 12:58:11
0 次浏览
0 评论
sql两张表,如何将符合条件的值相加
数据库中如何将查询出的数据转换成横过来的数据
你说的行列转换,可以参考:行行转换等经典SQL语句1.--行行转换原表:张三姓名题目结果中文80张三数学90张三物理85李中文85李斯物理82李斯英语90李斯政治70王五英语90转换后:姓名数学物理英语语言政治李四082908570王武009000张三90850800示例:createtablecj--创建表cj(IDIntIDENTITY(1,1)notnull,--创建列ID并每次添加一条记录young,1NameVarchar(50),SubjectVarchar(50),ResultInt,primary将被添加ey(ID)--设置ID为表cj的主键);--Truncatetablecj--Select*fromcjInsertintocjSelect'张三','中文',80unoniallChoose'张三','数学',90co-选择'张三','物理',85unionallSelect'李思','中文',85unionallSelect'李思','物理',82unionallSelect'李思','英语',90unionallSelect'李思','政治'in'英语'70',90--路径和行转换Declare@sqlvarchar(8000)Set@sql='Selectnames'Select@sql=@sql+',sum(caseSubjectwhen'''+Subject+'''thenResultelse0end)['+Sobject+']'from(selectdistinctSubjectfromcj)ascj--列出所有唯一的主题名称Select@sql=@sql+'fromcjgroupbyname'Exec(@sql)2.行列转换--连接原表:班级学号111213212231转换后的表:班级号11、2、321、231的学生示例:CreatableClassNo--创建表ClassNo(IDIntIDENTITY(1,1)notnull,--创建列ID并且每次添加新记录时,1ClassVarchar(50)将被添加,--classNumbericolumnVarchar(50),--学号列PrimaryKey(ID)--设置ID为主键ClassNo);--TruncateTableClassNo--Select*fromClassNoInsertIntoClassNoSelect1,1UnionallSelect1,2UnionallSelect1,3UnionallSelect2,1UnionallSelect2,2UnionallSelect3,1创建池化函数--DropFunctionKFReturnCreateFunctionKFReturn(@ClassVarchar(50))ReturnsVarchar(8000)asBeginDeclare@strVarchar(8000)Set@str=''Select@str=@str+cast(NumberasVarchar(50))+','fromClassNoWhereClass=@ClassSet@str=SubString(@str,1,len(@str)-1)Return(@str)End--调用自定义函数获取结果SelectDistinctClass,dbo.KFReturn(Class)FromClassNo3:列传输--DropTableColumnToRowCreatetableColumnToRow(IDIntIDENTITY(1,1)notnull,--创建列ID,每当添加新记录时,都会添加1aint,bint,cint,dint,eint,fint,gint,hint,PrimaryKey(ID)--定义ID为表主键ColumnToRow);--TruncateTableColumnToRow--Select*fromColumnToRowInsertIntoColumnToRowSelect15,9,1,0,1,2,4,2UnionallSelect22,34,44,5,6,7,8,7UnionallSelect33,44,55,66,77,88,99,12声明@sqlVarchar(8000)设置@sql=''Select@sql=@sql+rtrim(name)+'fromColumnToRowunionallSelect'fromSysColumnsWhereid=object_id('ColumnToRow')Set@sql=SubString(@sql,1,len(@sql)-70)--70长度比例为这个字符串'fromColumnToRowunionallSelectIDfromColumnToRowunionallSelect',因为它也会计算ID列值,所以它应该被打破Exec('选择'+@sql+'fromColumnToRow')相关文章
直接学习MySQL:从基础SQL到高级数...
2024-12-16 14:33:08SQL COUNT()函数详解:记录数与...
2024-12-21 05:34:00MySQL数据库建库与表创建指南:基础操...
2024-12-17 22:20:16高效SQL查询:轻松筛选成绩优秀学生
2024-12-18 01:40:48SQL Server服务启动失败?6步解...
2024-12-14 21:13:58Windows环境下MySQL服务管理:...
2024-12-15 17:38:13MySQL时间函数全解析:轻松获取当前日...
2024-12-22 18:26:23Redis缓存穿透及优化策略全解析
2024-12-16 10:23:37MySQL数据库表迁移攻略:两种方法轻松...
2024-12-20 20:18:50SQL日期加减操作:数据库系统中的函数与...
2024-12-15 05:18:45最新文章
22
2024-12
22
2024-12
22
2024-12
22
2024-12
22
2024-12
22
2024-12
22
2024-12
22
2024-12
22
2024-12
22
2024-12
热门文章
1
SQL2000数据库备份压缩技巧:优化空...
怎么将SQL2000中的较大的备份数据库压缩变小更改数据库属性-选项-恢复模型很...
2
高效掌握:CMD命令轻松启动、关闭及登录...
如何用cmd命令快速启动和关闭mysql数据库服务开发中经常使用MySQL数据库...
3
SQL字符串处理技巧:单引号使用与转义标...
SQL语句中,字符串类型的值均使用什么符号标明?单引号如果字符串内有单引号,请小...
4
Windows环境下Redis安装指南与...
redis安装windowsredis基本简介与安装安装Redis首先需要获取安...
5
深度解析:Redis性能优势与局限性,助...
redis有哪些优缺点?Redis的全称是RemoteDictionary.Se...
6
深入解析:MySQL数据库的特性与应用
mysql是什么MySQL是一个关系数据库管理系统。MySQL是一个开源关系数据...
7
Linux Redis后台启动教程:配置...
linux怎么启动redis1、首先,为了管理方便,将Redis文件中的conf...
8
MySQL浮点数与Decimal类型详解...
MySQL中的float和decimal类型有什么区别小数类型可以准确地表示非常...
9
C语言实现输入10个整数并找出最大最小值...
C语言从键盘输入任意的10个整数,从中找出最大值和最小值并输出代码:#inclu...
10
揭秘MySQL:为何将可重复读设为默认事...
mysql默认的事务隔离级别是READUNCOMMITTED(未提交读)、REA...