求SQL语句(关于数据更新)

HsuTsiang 2010-11-19 10:53:11
成绩表

姓名 科目 分数
---- ---- ----
张三 数学 90
李四 数学 80
王五 数学 70
张三 语文 60
李四 语文 50
王五 语文 40
赵六 数学 30
赵六 语文 20

补考成绩表

姓名 科目 分数
---- ---- ----
李四 语文 70
王五 语文 75

1、想把成绩表中不及格的,并参加补考及格的,更新成“补及”。
2、想把成绩表中不及格的,并参加补考及格的,更新成补考成绩。
...全文
58 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hello926 2010-11-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dawugui 的回复:]
引用 4 楼 hsutsiang 的回复:
分数 是字符型


SQL code
create table 成绩表(姓名 varchar(4),科目 varchar(4),分数 varchar(10))
insert into 成绩表
select '张三','数学','90' union all
select '李四','数学','80' union all
select '王……
[/Quote]

MARK
dawugui 2010-11-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hsutsiang 的回复:]
分数 是字符型
[/Quote]
create table 成绩表(姓名 varchar(4),科目 varchar(4),分数 varchar(10))
insert into 成绩表
select '张三','数学','90' union all
select '李四','数学','80' union all
select '王五','数学','70' union all
select '张三','语文','60' union all
select '李四','语文','50' union all
select '王五','语文','40' union all
select '赵六','数学','30' union all
select '赵六','语文','20'

create table 补考成绩表 (姓名 varchar(4),科目 varchar(4),分数 varchar(10))
insert into 补考成绩表
select '李四','语文','70' union all
select '王五','语文','75'

update 成绩表 set 分数 = '补及'
from 成绩表 m, 补考成绩表 n
where m.姓名 = n.姓名 and m.科目 = n.科目 and cast(n.分数 as int) >= 60

select * from 成绩表
/*
姓名 科目 分数
---- ---- ----------
张三 数学 90
李四 数学 80
王五 数学 70
张三 语文 60
李四 语文 补及
王五 语文 补及
赵六 数学 30
赵六 语文 20

(所影响的行数为 8 行)
*/


drop table 成绩表 , 补考成绩表
dawugui 2010-11-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hsutsiang 的回复:]
是想直接将成绩表中的分数更新成“补及”或补考分数。
[/Quote]
create table 成绩表(姓名 varchar(4),科目 varchar(4),分数 int)
insert into 成绩表
select '张三','数学',90 union all
select '李四','数学',80 union all
select '王五','数学',70 union all
select '张三','语文',60 union all
select '李四','语文',50 union all
select '王五','语文',40 union all
select '赵六','数学',30 union all
select '赵六','语文',20

create table 补考成绩表 (姓名 varchar(4),科目 varchar(4),分数 int)
insert into 补考成绩表
select '李四','语文',70 union all
select '王五','语文',75

update 成绩表 set 分数 = n.分数
from 成绩表 m, 补考成绩表 n
where m.姓名 = n.姓名 and m.科目 = n.科目

select * from 成绩表
/*
姓名 科目 分数
---- ---- -----------
张三 数学 90
李四 数学 80
王五 数学 70
张三 语文 60
李四 语文 70
王五 语文 75
赵六 数学 30
赵六 语文 20

(所影响的行数为 8 行)
*/


drop table 成绩表 , 补考成绩表
HsuTsiang 2010-11-19
  • 打赏
  • 举报
回复
分数 是字符型
HsuTsiang 2010-11-19
  • 打赏
  • 举报
回复
是想直接将成绩表中的分数更新成“补及”或补考分数。
叶子 2010-11-19
  • 打赏
  • 举报
回复


declare @成绩表 table (姓名 varchar(4),科目 varchar(4),分数 int)
insert into @成绩表
select '张三','数学',90 union all
select '李四','数学',80 union all
select '王五','数学',70 union all
select '张三','语文',60 union all
select '李四','语文',50 union all
select '王五','语文',40 union all
select '赵六','数学',30 union all
select '赵六','语文',20

declare @补考成绩表 table (姓名 varchar(4),科目 varchar(4),分数 int)
insert into @补考成绩表
select '李四','语文',70 union all
select '王五','语文',75

select a.*,b.科目 as 补及,b.分数 as 新分数 from @成绩表 a
left join @补考成绩表 b
on a.姓名=b.姓名
and a.科目=b.科目
/*
姓名 科目 分数 补及 新分数
---- ---- ----------- ---- -----------
张三 数学 90 NULL NULL
李四 数学 80 NULL NULL
王五 数学 70 NULL NULL
张三 语文 60 NULL NULL
李四 语文 50 语文 70
王五 语文 40 语文 75
赵六 数学 30 NULL NULL
赵六 语文 20 NULL NULL

*/


我把结果取出来了,你对应着更新就可以了。
叶子 2010-11-19
  • 打赏
  • 举报
回复
哪个位置更新为“补及”

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧