2 fanfan gg fanfan_gg 于 2014.03.11 15:25 提问

求一个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都不能画么

2个回答

qingzhishuishou
qingzhishuishou   2014.03.17 17:50

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

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

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

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
用SQL实现行列转换的一个例子
在CU上看到一个问题。 http://bbs.chinaunix.net/
行列转换-->动态SQL语句例子
1. 例子create table cjb(姓名 char (10),课程名 char (10),成绩 [decimal](12, 2))insert into cjb  select 张,    数据库  ,  78 unionselect 张 ,   信息管理 , 80 unionselect 张,    专业英语 , 89 unionsel
sql实现行列转换
postgresql 现有一个表如(表一)想要转换为(表二) sql:select stuName as 姓名,chinese as 语文,math as 数学,english as 英文 from(
行列转换/矩阵转换
行列转换/矩阵转换一、行列转换。1、纵转换为横。有表:test(name char(10),km char(10),cj int)name  km  cj----------------------------------------------张三  语文  80张三  数学  86张三  英语  75李四  语文  78李四  数学  85李四  英语  78要求以横向格式显示,即
锋利的SQL-SQL Server的表旋转(行列转换)
所谓表旋转,就是将表的行转换为列,或是将表的列转换为行,这是从SQL Server 2005开始提供的新技术。因此,如果希望使用此功能,需要将数据库的兼容级别设置为90。表旋转在某些方面也是解决了表的数据存储和实际需要之间的矛盾。
T-SQL查询:行列转换简单实例
--★转换结果如上图 --创建测试标 CREATE TABLE [成绩表]( [编号] [int] IDENTITY(1,1) NOT NULL, [姓名] [varchar](50) NULL, [语文] [numeric](5, 2) NULL, [数学] [numeric](5, 2) NULL, [英语] [numeric](5, 2) NULL ) ON [PRIMARY
一道SQL面试题(行列互换)
有一个类似于行列互换的SQL题在面试中出现的概率极高,最近有学生出去面试仍然会遇到这样的题目,在这里跟大家分享一下。
如何用SQL语句实现行列转换
如何用SQL语句实现行列转换行列转换是数据库系统中经常遇到的一个需求,在数据库设计时,为了适合数据的累积存储,往往采用直接记录的方式,而在展示数据时,则希望整理所有记录并且转置显示。图9.1展示了行列转换的功能。 图9.1  行列转换的需求分析这个需求,可以发现希望做的是找出具有相同部门的记录,并根据其材料的值累加数量。如果手动来写的话,最终希望得到
[数据库] SQL查询语句表行列转换及一行数据转换成两列
本文主要讲述了SQL查询语句表之间的行列转换,同时也包括如何将一行数据转换成两列数据的方法、子查询的应用、decode函数的用法。希望文章对你有所帮助~ 1.创建数据库表及插入数据 2.子查询统计不同性质的学生总数 3.一行数据转换成两列数据 union all 4.表行列数据转换(表转置)
sql server行列转化和行列置换
行列转换:姓名 课程 分数 张三 语文 74 张三 数学 83 张三 物理 93 李四 语文 74 李四 数学 84 李四 物理 94 想变成(得到如下结果): 姓名 语文 数学 物理 ---- ---- ---- ---- 李四 74 84