3、表如下:
分数 班级 姓名
60 1班 张三
40 1班 李四
60 1班 王五
50 2班 刘一
20 2班 吴涛
43 2班 将二
30 3班 李力
79 3班 小煤
80 3班 刘涛 想写一个sql语句查询结果如下:
分数 班级 姓名 所在班级总分
60 1班 张三
40 1班 李四 160
60 1班 王五
50 2班 刘一
20 2班 吴涛 113
43 2班 将二
30 3班 李力
79 3班 小煤 189
80 3班 刘涛
也就是说想在查询后多一列“所在班级总分”,而且只能在每组的一条记录中显示出来,该怎么写呀?(提示:isnull()函数,left join)
--测试数据
create table 表(分数 int,班级 varchar(10),姓名 varchar(10))
insert 表 select 60,'1班','张三'
union all select 40,'1班','李四'
union all select 60,'1班','王五'
union all select 50,'2班','刘一'
union all select 20,'2班','吴涛'
union all select 43,'2班','将二'
union all select 30,'3班','李力'
union all select 79,'3班','小煤'
union all select 80,'3班','刘涛'
go
分数 班级 姓名
60 1班 张三
40 1班 李四
60 1班 王五
50 2班 刘一
20 2班 吴涛
43 2班 将二
30 3班 李力
79 3班 小煤
80 3班 刘涛 想写一个sql语句查询结果如下:
分数 班级 姓名 所在班级总分
60 1班 张三
40 1班 李四 160
60 1班 王五
50 2班 刘一
20 2班 吴涛 113
43 2班 将二
30 3班 李力
79 3班 小煤 189
80 3班 刘涛
也就是说想在查询后多一列“所在班级总分”,而且只能在每组的一条记录中显示出来,该怎么写呀?(提示:isnull()函数,left join)
--测试数据
create table 表(分数 int,班级 varchar(10),姓名 varchar(10))
insert 表 select 60,'1班','张三'
union all select 40,'1班','李四'
union all select 60,'1班','王五'
union all select 50,'2班','刘一'
union all select 20,'2班','吴涛'
union all select 43,'2班','将二'
union all select 30,'3班','李力'
union all select 79,'3班','小煤'
union all select 80,'3班','刘涛'
go
select a.分数, a.班级, a.姓名, b.所在班级总分 form tb a,
(select sum(分数), 班级 from tb group by 班级) b
where a.班级=b.班级
你可以试一下
insert #T select 60,'1班','张三'
union all select 40,'1班','李四'
union all select 60,'1班','王五'
union all select 50,'2班','刘一'
union all select 20,'2班','吴涛'
union all select 43,'2班','将二'
union all select 30,'3班','李力'
union all select 79,'3班','小煤'
union all select 80,'3班','刘涛'
go select a.*,isnull(CAST(b.总分数 as nvarchar),'') 所在班级总分 from #T a left join
(select sum(分数) 总分数,max(姓名) 姓名,班级 from #T group by 班级) b on a.班级=b.班级 and a.姓名=b.姓名drop Table #T