遗留问题——sql面试篇(动态合并单表数据)

来源:互联网 发布:淘宝中评看不到 编辑:程序博客网 时间:2024/05/15 04:51



背景:

       为何说是一雪前耻呢,想当年,我还小,我出去面试远洋,远远地看着浩哥在那里坐着,然后下班去吃饭,我和东辉却在那里静静地等待着第二轮的技术面试(结果是没有面上,一个是学历问题),终于一个小个子姐姐把我领走了,问了我好多问题,像什么WCF啊,MVC啊什么的,都没有问,直接问我,后台怎么样,会写sql吗,我说当然会,在以前主要干后台,他在问的同时就编了好几个问题,其中有一个也是最后一个我没有打上来的问题如下图:

                     

告诉我如何写能输出一下效果:


                     


       静静的沉思,歇了一会,想了想,最终说:“对不起,我有点紧张,暂时解决不了”,人家说了句,这个很简单啊,应该怎么样怎么样,她也写了一会,说,肯定能实现,我说:“是”。


       我出去工作了一段时间,期间利用sql解决挺多为,也帮助同事去拼sql,终于自己的水平有了一点长进,就在刚才,突然之间我又想起了这段往事,决定去自己解决一下这个问题,功夫不负有心人,完成了,分享一下:

select StudentName,        (select Result from TestTable as RT where RT.StudentName=ST.StudentName and RT.LessonName='语文') as Chinese,(select Result from TestTable as BT where BT.StudentName=ST.StudentName and BT.LessonName='数学') as Suanshu,        (CASE WHEN (select Result from TestTable as RT where RT.StudentName=ST.StudentName and RT.LessonName='语文')>0 THEN (select Result from TestTable as BT where BT.StudentName=ST.StudentName and BT.LessonName='语文') ELSE 0 END + CASE WHEN (select Result from TestTable as RT where RT.StudentName=ST.StudentName and RT.LessonName='数学')>0 THEN (select Result from TestTable as BT where BT.StudentName=ST.StudentName and BT.LessonName='数学') ELSE 0 END) as Resultsumfrom TestTable as ST GROUP BY ST.StudentName ORDER BY resultsum DESC</span>

如果有需要讲解或者更好建议的同志,请qq联系

2 0
原创粉丝点击