create table 成绩表(学号 int identity(1,1),姓名 varchar(10),科目 varchar(10),成绩 int)
insert 成绩表 select '张三','语文',80
insert 成绩表 select '李四','语文',83
insert 成绩表 select '王五','英语',99
insert 成绩表 select '李四','数学',88
insert 成绩表 select '张三','英语',66
insert 成绩表 select '王五','数学',87
insert 成绩表 select '李四','英语',69
insert 成绩表 select '张三','数学',63
insert 成绩表 select '王五','语文',77select 科目,  ????  from 成绩表 group by 科目
要显示成:(就是group by 科目后没group by的姓名累加起来)科目  学生
-------------
语文  张三+李四+王五

解决方案 »

  1.   

    create table 成绩表(学号 int identity(1,1),姓名 varchar(10),科目 varchar(10),成绩 int)
    insert 成绩表 select '张三','语文',80
    insert 成绩表 select '李四','语文',83
    insert 成绩表 select '王五','英语',99
    insert 成绩表 select '李四','数学',88
    insert 成绩表 select '张三','英语',66
    insert 成绩表 select '王五','数学',87
    insert 成绩表 select '李四','英语',69
    insert 成绩表 select '张三','数学',63
    insert 成绩表 select '王五','语文',77go
    --写一个聚合函数:
    create function dbo.fn_Merge(@科目  varchar(1000))
    returns varchar(8000)
    as
    begin
       declare @name varchar(8000)
       set @name=''
       select @name=@name+'+'+姓名 from 成绩表 where 科目=@科目
       return stuff(@name,1,1,'')
    end
    go-- 调用函数
    select 科目, dbo.fn_Merge(科目) as 姓名 from 成绩表 group by 科目
      drop table 成绩表
    drop function fn_Merge
      

  2.   

    select 科目,sum(成绩) 成绩 from 成绩表 group by 科目
      

  3.   

    create table 成绩表(学号 int identity(1,1),姓名 varchar(10),科目 varchar(10),成绩 int)
    insert 成绩表 select '张三','语文',80
    insert 成绩表 select '李四','语文',83
    insert 成绩表 select '王五','英语',99
    insert 成绩表 select '李四','数学',88
    insert 成绩表 select '张三','英语',66
    insert 成绩表 select '王五','数学',87
    insert 成绩表 select '李四','英语',69
    insert 成绩表 select '张三','数学',63
    insert 成绩表 select '王五','语文',77create function fun(@科目 nvarchar(10))
    returns nvarchar(200)
    as
    begin
        declare @re nvarchar(200)
        set @re=''
        select @re=@re+','+姓名 from 成绩表 where 科目=@科目    return stuff(@re,1,1,'')
    end
    select 科目,dbo.fun(科目) as 学生
    from 成绩表 group by 科目
      

  4.   

    SQL Server 2000中常用的处理方式有两种:1、创建自定义函数
    2、用游标
    使用自定义函数是最简单的方式。