日期:2014-05-16  浏览次数:20464 次

sql server 创建视图的sql语句问题
本帖最后由 chenh_w 于 2014-02-26 17:14:15 编辑
小弟现在有这么两张表(员工:工号,姓名,。。。。)(教育经历:Id,工号,毕业日期,学历。。。)(省略了无关字段),我的考虑是如果在员工表里有学历字段就会产生数据冗余,所以准备用视图,要求是取第二张表里毕业时间最靠后的一条记录作为学历。我这种想法对吗?sql语句应该怎么写啊
------解决方案--------------------
试试这个:
select 工号,姓名,毕业日期,学历
from 
(
select a.工号,a.姓名,b.毕业日期,b.学历,
       ROW_NUMBER() over(partition by a.工号 order by b.毕业日期 desc) rownum
from 员工  a
inner join 教育经历 b
        on a.工号 = b.工号
)t
where rownum = 1

------解决方案--------------------
建议还是做这个冗余,毕竟这个冗余的信息并不多

如果有毕业时间最靠后的学历不是最高学历的情况呢? 
没有规定禁止这样吧,比如博士毕业了去学个MBA,那学历就是硕士了