+ -
当前位置:首页 → 问答吧 → 根据条件是否合并为一条记录

根据条件是否合并为一条记录

时间:2011-11-28

来源:互联网

数据表如下结构

请教大家:怎样写sql语句实现:当重修标记值为1的是时候,合并相同课程名称的记录为一条记录,并且将带有重修标记的成绩赋值与重修成绩
如下效果

学号 课程名称 成绩 重修成绩
1006 经济学 49 89

作者: tiewuqing   发布时间: 2011-11-28

SQL code

select a.学号, a.课程名称, a.成绩,
isnull(b.重修成绩,a.重修成绩) '重修成绩'
from tab a
left join (select * from tab where 重修标记=1) b
on a.学号=b.学号 and a.课程名称=b.课程名称
where a.重修标记<>1

作者: ap0405140   发布时间: 2011-11-28

感谢楼上还得请教
isnull(b.重修成绩,a.重修成绩) '重修成绩'
是什么意思呢

作者: tiewuqing   发布时间: 2011-11-28

SQL code

with cte as 
(
    select * from (
    select ROW_NUMBER() over(partition by 学号 order by 重修标记) 排序哦 ,学号,课程名称,成绩,重修成绩,重修标记 from SCORE
            ) t where 排序哦 =1
),cte2 as
(
    select * from (
    select ROW_NUMBER() over(partition by 学号 order by 重修标记) 排序哦 ,学号,课程名称,成绩,重修成绩,重修标记 from SCORE
            ) t where 排序哦 =2
)select cte.学号,cte.课程名称,cte.成绩,cte2.成绩 重修成绩,cte2.重修标记 from cte left join cte2 on cte.学号= cte2.学号



作者: myxx520   发布时间: 2011-11-28

明白了 谢谢!!给分

作者: tiewuqing   发布时间: 2011-11-28

其实就是把正式考试的结果作为一个数据集,重修结果作为一个数据集,两个数据集进行连接查询就OK

作者: myxx520   发布时间: 2011-11-28

引用 3 楼 myxx520 的回复:

SQL code

with cte as
(
select * from (
select ROW_NUMBER() over(partition by 学号 order by 重修标记) 排序哦 ,学号,课程名称,成绩,重修成绩,重修标记 from SCORE
) t where 排序哦 =1
),cte2 as
(
select * fr……


重修标记只是个状态值 为什么排序呢

作者: tiewuqing   发布时间: 2011-11-28

晕,没搞懂,好复杂
还要努力啊

作者: hy_number_one   发布时间: 2011-11-28

引用 5 楼 myxx520 的回复:

其实就是把正式考试的结果作为一个数据集,重修结果作为一个数据集,两个数据集进行连接查询就OK


这句精辟 明白了谢谢!

作者: tiewuqing   发布时间: 2011-11-28

热门下载

更多