|
2021/02/24(Wed) 16:45:43 編集(投稿者)
■No96895 (くれんけ さん) に返信 > 以下のデータをとる方法を教えてください > ID, NAMES > 1, 'A,B,C,D' > 1, 'E,F,G'
「1, 'E,F,G'」ではなく 「2, 'E,F,G'」ですよね?
手っ取りばやく STRING_AGG を使いたい所ですが、 今回は SQL Server のバージョンが古いので、 FOR XML PATH を使うことになるかな。
CREATE TABLE [TBL] ([ID] INT NOT NULL, [NAME] NVARCHAR(10) NOT NULL);
INSERT INTO [TBL] ([ID], [NAME]) VALUES (1, N'A'), (1, N'B'), (1, N'C'), (1, N'D'), (2, N'E'), (2, N'F'), (2, N'G');
/* 案1: STRING_AGG を使う方法。要 SQL Server 2017 以上 */
SELECT [ID], [NAMES] = STRING_AGG([NAME], ',') FROM [TBL] GROUP BY [ID] ORDER BY [ID] ;
/* 案2: FOR XML PATH を用いる方法 */
WITH [A] AS ( SELECT DISTINCT [B].[ID], [NAMES]=( SELECT [C].[NAME] + N',' FROM [TBL] [C] WHERE [B].[ID] = [C].[ID] ORDER BY [C].[NAME] FOR XML PATH('') ) FROM [TBL] [B] ) SELECT [ID], [NAMES] =STUFF([NAMES], LEN([NAMES]), LEN([NAMES]), '') FROM [A] ORDER BY [ID]
|