表table1
name class score
张三 语文 90
张三 数学 80
李四 语文 70
我想形成这样的记录集:
姓名 课程 分数
张三 语文、数学 170 (就是90+80来的)
李四 语文 70
不知该怎么写啊?请大家帮我
------解决思路----------------------
SELECT name
,STUFF((SELECT '、'+class FROM table1 WHERE name=T.name FOR XML PATH('')),1,1,'')
,SUM(T.score)score
FROM table1 T GROUP BY name
------解决思路----------------------
IF OBJECT_ID('F_Str') IS NOT NULL
DROP FUNCTION F_Str
go
CREATE FUNCTION F_Str ( @name VARCHAR(50) )
RETURNS NVARCHAR(100)
AS
BEGIN
DECLARE @S NVARCHAR(100)
SELECT @S = ISNULL(@S + N'、', '') + class
FROM Table1
WHERE name = @name
RETURN @S
END
go
SELECT name
,class = dbo.F_Str(name)
,SUM(score) AS score
FROM Table1
GROUP BY name参数合并分拆方法:
合并分拆表_整理贴1
------解决思路----------------------
select name as 姓名,
stuff((select '、'+class from table1 where name=a.name for xml path('')),1,1,'') as 课程,
sum(a.score) as 分数
from table1 as a
group by name
order by name
------解决思路----------------------
会不成功,ACCESS可以考虑用自定义函数实现
------解决思路----------------------
首先自定义一个class的计算的标量函数
CREATE FUNCTION [dbo].[FindName]
(
@name varchar(50)
)
RETURNS varchar(max)
AS
BEGIN
-- Declare the return variable here
declare @val varchar(max)=''
select @val+= class+'、' from table1 where name=@name
set @val=left(@val,len(@val)-1)
return @val
END
然后再查询
select name '姓名',dbo.FindName(name) '课程',sum(score) '分数' from table1 group by name