SELECT 姓名,SUM(分数) as 分数,学科 FROM( SELECT 姓名,分数,(SELECT 学科+',' FROM @table WHERE 姓名=A.姓名 for XML PATH('')) AS 学科 FROM @table A ) B group by 姓名,B.学科姓名 分数 学科 -------------------- ----------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 张三 240 语文,数学,英语,
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.学科
--> 测试数据:[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]
--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 */
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 语文,数学,英语,
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.学科
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]
--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
*/