愚者の経験

「また今度」はほとんどこない

Group Byでの文字列連結[SQL Server]

「SQLCLR」で集計関数使ってもいいんですがもう少し手軽に
扱いたいなら「FOR XML PATH(”),TYPE」でselectの結果を
XML型にしValueメソッド(?)でvarcharやnvarcharに変換すると可能です。

サンプルSQL(グループの文字列はサブクエリになります)

create table #tmp(
	ID int identity(1,1) not null ,
	NUM int null,
	TXT varchar(50) null
)

insert into #tmp(NUM,TXT)
values(1,'fjak;lj')
	,(2,'fakdj')
	,(1,'f;laj')
	,(2,'dfjoji')
	,(3,'roa')
	,(2,'jfdosk')
	,(1,'ajfasj')
	,(2,'dfoaif')
	,(2,'djljfl')
	,(1,'kajl')
	,(3,'f')

select T.NUM
	,(
		select '##'+X.TXT
		from #tmp as X
		where X.NUM=T.NUM
		order by X.ID
		for xml path(''),type).value('.','nvarchar(max)'
	) as gpjoin
from #tmp as T
group by NUM

drop table #tmp

実際Valueメソッドは使わなくてもいいのですが
xmlのマークアップに使われる特殊文字は変換されますので
Valueメソッドを使うほうが安全です。<>→&lt;&gt;みたいな。

広告

Group Byでの文字列連結[SQL Server]」への1件のフィードバック

  1. ピンバック:「GROUP BY」でまとまった文字列の連結 | 街並みハンターと髭もじゃモンスター

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。