SQL Server 利用 Stuff 和 for xml path 拼接字符

一、創建表

    1.Person人員表

  


CREATE TABLE [dbo].[Person](
	[ID] [int] IDENTITY(1,1) NOT NULL,
	[Name] [nchar](10) NULL,
	[InClub] [nvarchar](255) NULL,
 CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED 
(
	[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

  2.PersonClub 社團表

    


CREATE TABLE [dbo].[PersonClub](
	[ID] [int] IDENTITY(1,1) NOT NULL,
	[ClubName] [nvarchar](50) NULL,
 CONSTRAINT [PK_PersonClub] PRIMARY KEY CLUSTERED 
(
	[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

   注意:InClub字段是表示該人加入了哪些社團 用 ','隔開。(我個人不建議這樣設計表,但是有時候確實有這種情況)

二、加入點數據 並查詢出來

1	張三        	1,3,5
2	李四        	2,3,4
3	王無        	3,2
1	編程協會
2	羽毛球協會
3	武術協會
4	旋律社
5	動漫社
6	攝影社

三、查詢所有人以及所有人加入的社團情況

SELECT *
FROM Person D
	CROSS APPLY (
		SELECT STUFF((
				SELECT ',' + C.ClubName
				FROM Person A
					CROSS APPLY f_split(A.InClub, ',') B
					LEFT JOIN PersonClub c ON c.ID = B.a
				WHERE A.ID = D.ID
				FOR XML path('')
			), 1, 1, '') AS ClubName
	) E

結果

1	張三        	1,3,5	編程協會,武術協會,動漫社
2	李四        	2,3,4	羽毛球協會,武術協會,旋律社
3	王無        	3,2	武術協會,羽毛球協會

備註: f_split 表值函數是在網上找的,用於分割字符串爲臨時表,這裏不做討論。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章