姓名       学科         分数
张三         语文         90
张三         数学         80
张三         英语         70怎样查询出:
姓名         学科                             总分数
张三         语文,数学,英语          140呵呵

解决方案 »

  1.   

     declare @table table (姓名 varchar(20),学科  varchar(20),分数 int)
     insert into @table values (' 张三','语文',90),(' 张三','数学',80),(' 张三','英语',70) 
     
    SELECT 姓名,SUM(分数) as 分数,学科 FROM(   
    SELECT 姓名,分数,(SELECT 学科+',' FROM @table WHERE 姓名=A.姓名 for XML PATH('')) AS 学科   
    FROM @table A     
    ) B  group by 姓名,B.学科姓名                   分数          学科
    -------------------- ----------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     张三                  240         语文,数学,英语,
      

  2.   

    declare @table table (姓名 varchar(20),学科  varchar(20),分数 int)
    insert into @table values (' 张三','语文',90),(' 张三','数学',80),(' 张三','英语',70) 
     
    SELECT 姓名,SUM(分数) as 分数,substring(学科,1,len(学科)-1) as 学科 FROM(   
    SELECT 姓名,分数,(SELECT 学科+',' FROM @table WHERE 姓名=A.姓名 for XML PATH('')) AS 学科   
    FROM @table A     
    ) B  group by 姓名,B.学科
      

  3.   

    --> 测试数据:[tb]
    if object_id('[tb]') is not null drop table [tb]
    GO
    create table [tb]([姓名] varchar(4),[学科] varchar(4),[分数] int)
    insert [tb]
    select '张三','语文',90 union all
    select '张三','数学',80 union all
    select '张三','英语',70select 姓名,b.[学科], 总分数=sum([分数]) from [tb] t
    CROSS APPLY (SELECT [学科]=STUFF((SELECT ','+[学科] FROM TB WHERE t.姓名=姓名 for xml path('')),1,1,'') )b
    GROUP BY 姓名,b.[学科]drop table [tb]
      

  4.   


    --student
    if object_id('student','u') is not null
    drop table studentgo
    create table student
    (
    姓名 nvarchar(20),
    学科 nvarchar(10),
    分数 smallint
    )go
    insert into student values
    ('张三','语文',90),
    ('张三','数学',80),
    ('张三','英语',70),
    ('李四','语文',30),
    ('李四','英语',70)
     
    go 
    --SQL
    select B.姓名,LEFT(B.BList,LEN(B.BList)-1) as 学科,B.总分 from(
    select 姓名,(
    select 学科+',' From Student 
    where 姓名= A.姓名 
    for xml path('')) BList,
    SUM(分数) as 总分
    from student A
    group by 姓名) B--结果集
    /*
      姓名    学科               总分
    --李四 语文,英语        100
    --张三 语文,数学,英语   240
    */