SQL合並查詢數據,以逗號分隔


功能描述:

將查詢到的數據合並為一條數據,以逗號分隔

案例:

功能描述:

現有三張表:

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM