您现在的位置:主页 > 技术中心 > 数据库技术 > Sqlserver

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

来源:未知 责任编辑:责任编辑 发表时间: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 Server中的事务日志(三)----在简单恢复模式
  • SQL小技巧系列 --- 行转列合并
  • 如何将多个SQL查询统计结果一次显示出来
  • sql server 列转行
?? - ?? - ÝřŝžľŘÝź - TAGąęÇŠ - RSSśŠÔÄ - ??
Copyright © 2004-2024 上海卓卓网络科技有限公司