[学生表]学号 姓名 成绩
003 张三 88
004 李四 99
005 王五 59
006 赵六 49[补考表]
学号 补考成绩 补考时间
005 67 2012-4-11
005 57 2012-4-10
005 68 2012-4-9
006 69 2012-4-10
006 65 2012-4-9 要求一条语句联合查出最后考试成绩
学号 姓名 成绩 补考成绩
003 张三 88 null
004 李四 99 null
005 王五 59 67
006 赵六 49 69------------------------------------------------------
select * from [学生表] left join [补考表] on [学生表].学号 = [补考表].学号
我只会写到这步了..感觉好像要用 group by 还是做个补考表 的top 1 突然有点蒙了.
003 张三 88
004 李四 99
005 王五 59
006 赵六 49[补考表]
学号 补考成绩 补考时间
005 67 2012-4-11
005 57 2012-4-10
005 68 2012-4-9
006 69 2012-4-10
006 65 2012-4-9 要求一条语句联合查出最后考试成绩
学号 姓名 成绩 补考成绩
003 张三 88 null
004 李四 99 null
005 王五 59 67
006 赵六 49 69------------------------------------------------------
select * from [学生表] left join [补考表] on [学生表].学号 = [补考表].学号
我只会写到这步了..感觉好像要用 group by 还是做个补考表 的top 1 突然有点蒙了.
--> 测试数据:[学生表]
if object_id('[学生表]') is not null drop table [学生表]
create table [学生表]([学号] varchar(3),[姓名] varchar(4),[成绩] int)
insert [学生表]
select '003','张三',88 union all
select '004','李四',99 union all
select '005','王五',59 union all
select '006','赵六',49
--> 测试数据:[补考表]
if object_id('[补考表]') is not null drop table [补考表]
create table [补考表]([学号] varchar(3),[补考成绩] int,[补考时间] datetime)
insert [补考表]
select '005',67,'2012-4-11' union all
select '005',57,'2012-4-10' union all
select '005',68,'2012-4-9' union all
select '006',69,'2012-4-10' union all
select '006',65,'2012-4-9'select a.学号,a.姓名,a.成绩,b.补考成绩 from [学生表] a
full join (
select [学号],[补考成绩] from(
select ROW_NUMBER()over(partition by 学号 order by [补考时间] desc) as id,*
from [补考表])a where id=1
)b on a.学号=b.学号
/*
学号 姓名 成绩 补考成绩
003 张三 88 NULL
004 李四 99 NULL
005 王五 59 67
006 赵六 49 69
*/
--> 测试数据: [学生表]
if object_id('[学生表]') is not null drop table [学生表]
create table [学生表] (学号 varchar(3),姓名 varchar(4),成绩 int)
insert into [学生表]
select '003','张三',88 union all
select '004','李四',99 union all
select '005','王五',59 union all
select '006','赵六',49--> 测试数据: [补考表]
if object_id('[补考表]') is not null drop table [补考表]
create table [补考表] (学号 varchar(3),补考成绩 int,补考时间 datetime)
insert into [补考表]
select '005',67,'2012-4-11' union all
select '005',57,'2012-4-10' union all
select '005',68,'2012-4-9' union all
select '006',69,'2012-4-10' union all
select '006',65,'2012-4-9'
select *,补考成绩=
(select top 1 补考成绩 from [补考表] where 学号=t.学号) from [学生表] t
/*
学号 姓名 成绩 补考成绩
---- ---- ----------- -----------
003 张三 88 NULL
004 李四 99 NULL
005 王五 59 67
006 赵六 49 69
*/
(SELECT TOP 1 补考成绩 FROM [补考表] WHERE 学号=t.学号 ORDER BY [补考表].[补考时间] DESC) FROM [学生表] t
(SELECT TOP 1 补考成绩 FROM [补考表] WHERE 学号=t.学号 ORDER BY [补考表].[补考时间] DESC),补考时间=(SELECT TOP 1 补考时间 FROM [补考表] WHERE 学号=t.学号 ORDER BY [补考表].[补考时间] DESC) FROM [学生表]