一道合并成绩最高科目的解决方法

来源:未知 责任编辑:责任编辑 发表时间:2014-01-20 07:54 点击:

昨天在群里一位网友抛出这样的问题:
name   语文    数学     英语
张三    75    90       85
李四    80     85       85

获得表,查询每个 name 成绩最高的学科, 若有相同,并列
name    成绩    科目
张三    90      数学
李四    85      数学,英语

我的方案:
[sql]
CREATE TABLE [dbo].[ChengJi2](  
    [姓名] [nchar](10) NULL,  
    [成绩] [int] NULL,  
    [科目] nchar(100) NULL,  
  
) ON [PRIMARY]  
-------------------------------------  
Create Function [dbo].[Getkemu](  
    @姓名 char(10)=null)  
returns  varchar(8000)  
as  
begin  
      declare   @r   varchar(8000)   
      set   @r= ' '   
      select  @r=@r+ ', '+ rtrim(CAST (科目 as varchar))   from ChengJi2 where 姓名=@姓名  
      return   stuff(@r,1,2, ' ')  
end  
------------------------------------  
  
Insert into ChengJi2(姓名,成绩,科目) SELECT B.*  FROM (  
        select 姓名,MAX (成绩) 成绩  from(  
        SELECT     姓名, 语文 as 成绩,'语文' 科目  
        FROM         ChengJi   
        union all  
        SELECT     姓名, 数学 as 成绩,'数学' 科目  
        FROM         ChengJi   
        union all  
        SELECT     姓名, 英语 as 成绩,'英语' 科目  
        FROM         ChengJi ) T  
        group by 姓名) A INNER JOIN   
  
        (  
        select 姓名,MAX (成绩) 成绩,科目  from(  
        SELECT     姓名, 语文 as 成绩,'语文' 科目  
        FROM         ChengJi   
        union all  
        SELECT     姓名, 数学 as 成绩,'数学' 科目  
        FROM         ChengJi   
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • sql常见面试题
  • SQL SERVER 2005性能之跟踪
  • SQL编程(一)
  • LINUX上RMAN自动备份脚本
  • sql server面试题
  • 如何将多个SQL查询统计结果一次显示出来
  • 浅谈SQL Server中的事务日志(三)----在简单恢复模式下日志的角色
  • sql server 列转行
  • SQL小技巧系列 --- 行转列合并
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1