--建立测试环境 Create table 科目 (Id Int Identity(1,1), 科目名称 Nvarchar(10))Create table 成绩 (Id Int Identity(1,1), 姓名 Nvarchar(10), 得分 Int, PId Int) --插入数据 Insert 科目 Values(N'语文') Insert 科目 Values(N'数学')Insert 成绩 Values(N'张三', 80, 1) Insert 成绩 Values(N'李四', 90, 1) Insert 成绩 Values(N'王五', 70, 1) Insert 成绩 Values(N'张三', 80, 2) Insert 成绩 Values(N'王五', 90, 2) GO --建立函数 Create Function GetName(@ID Int) Returns Nvarchar(1000) As Begin Declare @S Nvarchar(1000) Set @S='' Select @S=@S+','+姓名 from 成绩 Where Pid=@ID Order by ID Return Stuff(@S,1,1,'') End GO --测试 Select A.科目名称, dbo.GetName(A.ID) As 姓名, AVG(B.得分) As 平均分 from 科目 A Left Join 成绩 B On A.ID=B.PId Group By A.ID,A.科目名称 Order By A.ID --删除测试环境 Drop table 科目,成绩 Drop Function GetName --结果 /* 科目名称 姓名 平均分 语文 张三,李四,王五 80 数学 张三,王五 85 */
Create table 科目
(Id Int Identity(1,1),
科目名称 Nvarchar(10))Create table 成绩
(Id Int Identity(1,1),
姓名 Nvarchar(10),
得分 Int,
PId Int)
--插入数据
Insert 科目 Values(N'语文')
Insert 科目 Values(N'数学')Insert 成绩 Values(N'张三', 80, 1)
Insert 成绩 Values(N'李四', 90, 1)
Insert 成绩 Values(N'王五', 70, 1)
Insert 成绩 Values(N'张三', 80, 2)
Insert 成绩 Values(N'王五', 90, 2)
GO
--建立函数
Create Function GetName(@ID Int)
Returns Nvarchar(1000)
As
Begin
Declare @S Nvarchar(1000)
Set @S=''
Select @S=@S+','+姓名 from 成绩 Where Pid=@ID Order by ID
Return Stuff(@S,1,1,'')
End
GO
--测试
Select
A.科目名称,
dbo.GetName(A.ID) As 姓名,
AVG(B.得分) As 平均分
from 科目 A
Left Join 成绩 B
On A.ID=B.PId
Group By A.ID,A.科目名称
Order By A.ID
--删除测试环境
Drop table 科目,成绩
Drop Function GetName
--结果
/*
科目名称 姓名 平均分
语文 张三,李四,王五 80
数学 张三,王五 85
*/