标题:SQL语句 表内数据合并
只看楼主
smofbao
Rank: 1
等 级:新手上路
帖 子:135
专家分:0
注 册:2006-4-5
 问题点数:0 回复次数:12 
SQL语句 表内数据合并
一个表是这样设计的 字段是:学号 姓名 成绩 科目 学号和科目组成联合主键
如数据有 0001 王五 90 语文
0001 王五 80 数学
0001 王五 90 英语
现在要 显示成怎么样?
学号 姓名 语文 数学 英语
0001 王五 90 80 90
搜索更多相关主题的帖子: SQL 英语 数据合并 数学 语句 
2007-09-13 07:58
xuejianming7
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2007-9-4
得分:0 
select 学号,姓名,(select 成绩 from a where 科目=语文)as 语文,(select 成绩 from a where 科目=数学)as 数学,(select 成绩 from a where 科目=英语)as 英语 from a where 学号=0001
看看行不行
2007-09-13 08:29
purana
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:广东-广州
等 级:版主
威 望:66
帖 子:6039
专家分:0
注 册:2005-6-17
得分:0 
比较典型的交叉表.

--创建表
CREATE TABLE [Test] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[name] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[subject] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[score] [numeric](18, 0) NULL ,
CONSTRAINT [PK_ID] PRIMARY KEY CLUSTERED
(
[id]
) ON [PRIMARY]
) ON [PRIMARY]
GO

--插入记录
insert into test([name],[subject],[score]) values('张三','语文',60)
insert into test([name],[subject],[score]) values('张三','数学',76)
insert into test([name],[subject],[score]) values('张三','英语',80)

insert into test([name],[subject],[score]) values('李四','语文',90)
insert into test([name],[subject],[score]) values('李四','数学',88)
insert into test([name],[subject],[score]) values('李四','英语',50)

--查询
select [name],sum(case [subject] when '数学' then score else 0 end) as '数学',
sum(case [subject] when '语文' then score else 0 end) as '语文',
sum(case [subject] when '英语' then score else 0 end) as '英语'
from test
group by [name]


我的msn: myfend@
2007-09-13 09:49
smofbao
Rank: 1
等 级:新手上路
帖 子:135
专家分:0
注 册:2006-4-5
得分:0 
xuejianming7 回答的可以达到,要加一个 distinct 不然会有重复的记录,
谢谢

2007-09-13 10:36
smofbao
Rank: 1
等 级:新手上路
帖 子:135
专家分:0
注 册:2006-4-5
得分:0 
purana
不愧为斑竹,经典

2007-09-13 10:52
smofbao
Rank: 1
等 级:新手上路
帖 子:135
专家分:0
注 册:2006-4-5
得分:0 

有遇到了点问题
在上面加入一个字段判断是否作弊
insert into test([name],[subject],[score]) values('张三',考试地点1,'语文',60)
insert into test([name],[subject],[score]) values('张三',考试地点2,'数学',76)
insert into test([name],[subject],[score]) values('张三',考试地点3,'英语',80)
上面的考试地点可以相同也可以不同
还有一个表是students表放着(张三,正确的考试地点)
要求显示的表是 姓名 是否作弊 语文 数学 英语
张三 是或否 60 76 80
判断是否作弊的标准是 正确的考试地点与上面记录中的考试地点1,2,3是否全部相等
全部相等就是没有作弊,否则就 作弊


2007-09-15 09:15
smofbao
Rank: 1
等 级:新手上路
帖 子:135
专家分:0
注 册:2006-4-5
得分:0 

下面在把问题难度在引深一下
还有 如果还有一个表 subject 里面存着
ID 科目
1 语文
2 数学
3 英语
4 物理
等等一些考试科目
上面 insert into test([name],[subject],[score]) values('张三',考试地点1,'语文',60)中的语文是与subject存的语文是有关系的
要求显示的表中 姓名 是否作弊 语文 数学 英语 这些考试科目是由subject中来决定的,不是由[Test]表中的记录决定的,subject中的考试科目在Test中不一定有,但Test表中考试科目subject表中一定要有。


2007-09-15 09:28
purana
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:广东-广州
等 级:版主
威 望:66
帖 子:6039
专家分:0
注 册:2005-6-17
得分:0 
把你的各表和你想要的最后结果贴出来..

我的msn: myfend@
2007-09-15 09:37
smofbao
Rank: 1
等 级:新手上路
帖 子:135
专家分:0
注 册:2006-4-5
得分:0 
subject表
ID 科目
1 语文
2 数学
3 英语
4 物理
5 化学
。。。
Test表
ID 姓名 实际的考试地点 科目 成绩
1 张三 ,311室, '语文', 60
2 张三 ,312室, '数学', 76
3 李四 ,311室, '英语', 80
4 张三 313室 英语,90
。。。
Students
id 姓名 正确的考试地点
1 张三 311室
2 李四 312室
。。。
要显示的表有2个

第一个表是 姓名 是否作弊,语文 数学 英语 物理 化学
说明这些考试科目是由subject中来决定的,不是由[Test]表中的记录决定的,subject中的考试科目在Test中不一定有,但Test表中考试科目subject表中一定要有
判断是否作弊的标准是同一人在Students中的考试地点与Test中所有科目的实际地点完全相同
如果在subject中有的科目,而Test表没有的分数就为0,

二个表是 姓名 正确的考试地点 语文,语文考试实际地点,数学,数学考试地点,英语,英语考试实际地点,。。。。


2007-09-15 10:10
风流上进
Rank: 1
等 级:新手上路
威 望:1
帖 子:63
专家分:0
注 册:2007-7-20
得分:0 
xuejianming7 的答案可以办到吗?

我是sql菜鸟,谁教我学sql我给他N多Q币 QQ: 353707719 。
2007-09-17 15:10



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-169526-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.107803 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved