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')相关文章

探索TinyRDM:下一代Redis桌面...
2025-03-19 05:16:31
高效查询与排序:学生课程成绩管理指南
2024-12-21 09:14:09
SQL Server实例启动与关闭命令大...
2024-12-16 10:43:57
python中的取余
2025-01-05 02:51:05
深入解析:MySQL数据库加密函数及其应...
2025-01-12 03:55:52
SQL语言功能解析:数据定义、操纵、控制...
2024-12-20 10:07:10
MySQL安装卡在Check?解决网络与...
2024-12-25 04:49:53
SQL数据库重启失败原因解析及解决策略
2024-12-30 20:32:47
MySQL数据插入指南:从基础到高级操作
2024-12-18 14:36:52
Linux数据库管理与SQL操作实战指南
2024-12-26 22:45:38最新文章
04
2025-04
04
2025-04
04
2025-04
04
2025-04
04
2025-04
04
2025-04
04
2025-04
04
2025-04
04
2025-04
04
2025-04
热门文章
1
高效掌握:CMD命令轻松启动、关闭及登录...
如何用cmd命令快速启动和关闭mysql数据库服务开发中经常使用MySQL数据库...
2
MySQL分区删除技巧与8.0版本新特性...
mysql删除分区在MySQL中,删除分区操作主要使用“可替代”的命令与“ dr...
3
Python代码实现:如何判断三角形的三...
python三角形三条边长,判断能否构成三角形Python三角形的三个长边如下:...
4
深度解析:MySQL查询语句执行顺序及优...
mysql查询语句执行顺序当这是由于执行SQL的过程时,了解其过程很重要。 ...
5
SQL教程:使用SUBSTRING和IN...
sql取特定字符的前面几位字符selectsubstr('L-0FCLDRBCT...
6
MySQL日期差异计算方法:轻松获取日期...
MySQL计算时间差两日期相减得月份mysql两时间相减得月MySQL计算时间之...
7
MySQL及SQL查询获取前10条数据方...
MySql查询前10条数据sql语句是从MySQL获取前1 0个数据的SQL查询...
8
MySQL启动问题排查与解决指南
Mysql为什么启动不了如果要配置MySQL,则遇到无法启动的问题,可能是由于配...
9
DbVisualizer添加MySQL数...
如何在DbVisualizer中添加本地mysql数据库由于DbVisualiz...
10
SQL字段默认值设置全攻略:轻松实现自动...
sql如何设置字段默认值设置SQL中某个字段的默认值;需要遵循几个步骤。首先您需...