这样来分组汇总,行不行呢?
姓名 学科 分数
张三 语文 90
张三 数学 80
张三 英语 70
怎样查询出:
姓名 学科 总分数
张三 语文,数学,英语 140
呵呵
------解决方案-------------------- 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 语文,数学,英语,
------解决方案----------------------> 测试数据:[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 '张三','英语',70
select 姓名,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 student
go
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
--结果集
/*
姓名 学科 总分