sql-求一个SQL行列转换的解决方案

问题描述

求一个SQL行列转换的解决方案

表存储结构如下定义
姓名 ----------科目 ----------分数 ----------预期分数
张三 ----------语文 ------------74 -------------------90
张三 ----------数学 ------------83 -------------------60
张三 ----------物理 ------------93 -------------------78
李四 ----------语文 ------------74 ------------------100
李四 ----------数学 ------------84 -------------------85
李四 ----------物理 ------------94 -------------------60

科目中的项是不确定的(不止语文数学物理)
想要得到结果如下

姓名----语文----语文预期分数----数学----数学预期分数----物理----物理预期分数

李四------74-----------------100-------84------------------85-------94------------------94
张三------74-------------------90-------83------------------60-------93------------------78

顺便说一句 CSDN这文本编辑器连个Table都不能画么

解决方案

如果科目中的项非常多的话建议程序中处理,如果不是非常多的话就直接每个类型都列出来

解决方案二:

select
    count(*),
    '姓名字段',
    (CASE WHEN  '学科字段'='语文' then '学科分数字段' END) AS '语文' ,
(CASE WHEN  '学科字段'='数学' then '学科分数字段' END) AS '数学' ,
(CASE WHEN  '学科字段'='物理' then '学科分数字段' END) AS '物理'
from tableName t
group by '姓名字段';

如果科目不能确定,建议使用存储过程。逻辑上跟我上面给的SQL一样。

记得我表有的“字段“的要正确

时间: 2024-11-03 12:24:30

sql-求一个SQL行列转换的解决方案的相关文章

[数据库] SQL查询语句表行列转换及一行数据转换成两列

本文主要讲述了SQL查询语句表之间的行列转换,同时也包括如何将一行数据转换成两列数据的方法.子查询的应用.decode函数的用法.希望文章对你有所帮助~ 1.创建数据库表及插入数据 2.子查询统计不同性质的学生总数 3.一行数据转换成两列数据 union all 4.表行列数据转换(表转置) 1.创建数据库表及插入数据 创建数据库.创建学生表并设置主键.插入数据代码如下: --创建数据库 create database StudentMS --使用数据库 use StudentMS --创建学生

sql server- 求教一个SQL SERVER数据导入问题

问题描述 求教一个SQL SERVER数据导入问题 我有几个表的数据要导入,每个表大概50到500W数据,为了方便后面对表的数据处理,我会在表中创建组合非聚集索引,请问我在应该在导之前建还是导之后建?如果是导之后建,建起来也挺慢的,有什么方法快速创建吗 解决方案 导入之后建,建立索引需要遍历表,计算每个字段,添加到索引存储中,所以肯定耗时,不管先建还是后建.但是推荐后建. 解决方案二: 检查下并行度参数设置,或者修改sql代码如下 maxdop=8,online=on 解决方案三: 创建速度应该

求一个sql的运用实例

问题描述 想做一个小型的账号管理系统,类似于QQYY那种的,最好是具体到每一步的,本人萌新一个,刚刚开始接触这个语言,基本属于什么都不会的那种.... 解决方案 解决方案二:那你应该先看介面设计程序,再看数据库解决方案三:还是先会爬,再会走,然后再想着怎么跑吧.一步步来才能走的踏实,不然就是糊弄自己.解决方案四:学习一下ado.net吧解决方案五:所有的网站都会用到sql的只是数据库是用什么数据库的问题,sql的语法有点差别解决方案六:先做个简单的CRUD程序吧.解决方案七:有多萌上照解决方案八

求一个sql语法怎么写?

问题描述 CREATEPROCEDUREPRO_AAAASBEGINDECLARE@WWVARCHAR(50)SELECT@WW='MLL>=0.5'SELECTCOUNT(*)FROMTEMPWHERE@WWEND上面的我只是写一个小例子,意思条件@WW是变化的,请怎么写才能成功!愚昧一天了,高手帮帮忙吧 解决方案 解决方案二:DECLARE@wwnvarchar(1024)DECLARE@sqlnvarchar(1024)SET@ww='MLL>=0.5'SET@sql='SELECTCO

【SQL 分析函数】wm_concat 行列转换

SQL> select deptno,hiredate,ename from emp order by 1,2;     DEPTNO HIREDATE       ENAME                                                 ---------- -------------- ----------                                                    10 09-6月 -81     CLARK   

求sql-求一个sql,oracle数据库问题

问题描述 求一个sql,oracle数据库问题 A表: id字段 aid字段 10000 99999 10000 88888 10001 77777 10001 66666 B表: did字段 77777 有以上两张表,A表id字段对应多个aid字段.要查询出来A表id字段,并且对应的所有aid字段都不在B表中.以上情况要求查询出10000. 求大神指点,谢谢. 解决方案 select id from A where id not in(select t.id from A t,B s wher

sqlserver-求一个sql的触发器统计数据

问题描述 求一个sql的触发器统计数据 小弟最近在做个小项目,有三张表,部门表,办公室表,人员表,统计表,结构是部门下有多个办公室,每个办公室有自己的成员,我想实现个触发器,统计每个部门的人数,比如男的有多少,女的有多少,然后保存在统计表中,添加和删除用户的时候更新统计表 部门表dpartment:did,dname 办公室表office:oid,did,oname 用户表user:uid,oid,usex,uname 统计表 statistics:sid,did,man,women 解决方案

求一个 sqlserver的游标语句

问题描述 求一个 sqlserver的游标语句 解决方案 这和游标有什么关系? SELECT a1.id a2.score FROM a a1 CROSS APPLY (SELECT SUM(score) score FROM a WHERE id <= a1.id ) a2 解决方案二: DECLARE @n intDECLARE @m intset @n=1set @score=0;select @id=max(id) from Aselect idscore from A where id

求一个优化的写法

问题描述 ///<summary>///编辑客户信息///</summary>///<paramname="model"></param>///<returns></returns>publicintEditCustomer(CustomerModelmodel){intres=CustomerDAL.Update(model);returnres;}///<summary>///编辑客户信息[前台]/