功能描述:
將查詢到的數據合並為一條數據,以逗號分隔
案例:
功能描述:
現有三張表:
Student(學生表)
Course(課程表)
Student-Course(學生課程關聯表)
要求查詢學生詳細信息,課程名稱以逗號分隔,查詢到結果如下圖所示:
解一:采用標量函數
需求完成步驟:
1. 創建標量函數
Create function GetCourseStr
(
@studentID nvarchar(50)
)
returns varchar(8000)
as
begin
declare @r varchar(8000)
set @r='';
select @r=@r+','+Course.CourseName
from Course inner join [Student-Course] on [Student-Course].CID=Course.CourseID
where [Student-Course].SID=@studentID
return stuff(@r, 1, 1, '')
end
2. 書寫查詢語句
select dbo.Get_DataStr(STORES.PK_STORE,1) from STORES
查詢到的效果圖如下:
解二:使用for xml
將查詢消息放在臨時表
select Student.StudentID, Student.StudentName, Student.StudentAge, Student.StudentSex, Course.CourseName
into #temp_Student from Student
inner join [Student-Course] on [Student-Course].SID=Student.StudentID
inner join Course on Course.CourseID=[Student-Course].CID
通過臨時表信息進行查詢
select StudentID,StudentName,StudentAge,StudentSex,left(CourseList,len(CourseList)-1)as CourseName From (
select StudentID,StudentName,StudentAge,StudentSex
,(select CourseName+',' from #temp_Student where StudentID=A.StudentID for xml path('') ) as CourseList
from #temp_Student A
group by StudentID,StudentName,StudentAge,StudentSex
) B
drop table #temp_Student
for xml path('') 返回類型為nvarchar(max)
拓展:
sql Stuff()函數:刪除指定長度的字符,並在指定的起點處插入另一組字符
語法:
STUFF ( character_expression , start , length ,character_expression )
eg: SELECT STUFF('abcdef', 2, 3, 'ijklmn') -----------> aijklmnef