Skip to content

Instantly share code, notes, and snippets.

@jason-mcdermott
Created August 24, 2018 23:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jason-mcdermott/d60d0d78135de8a027ba92e65b534c76 to your computer and use it in GitHub Desktop.
Save jason-mcdermott/d60d0d78135de8a027ba92e65b534c76 to your computer and use it in GitHub Desktop.
/*
sql transform this result
A, 1, q
A, 2, r
A, 3, x
B, 1, q
B, 2, q
to this
A, [1,2,3], [q,r,x]
B, [1,2], [q]
*/
DECLARE @Temp TABLE ([Group] NVARCHAR(1), Number INT, Letter NVARCHAR(1))
INSERT INTO @Temp VALUES ('A', 1, 'q')
INSERT INTO @Temp VALUES ('A', 2, 'r')
INSERT INTO @Temp VALUES ('A', 3, 'x')
INSERT INTO @Temp VALUES ('B', 1, 'q')
INSERT INTO @Temp VALUES ('B', 2, 'q')
INSERT INTO @Temp VALUES ('C', 2, 'q')
INSERT INTO @Temp VALUES ('C', 2, 'x')
INSERT INTO @Temp VALUES ('C', 3, 'x')
INSERT INTO @Temp VALUES ('C', 4, 'y')
INSERT INTO @Temp VALUES ('C', 5, 'z')
/* SOLUTION 1 - Trailing Commas */
SELECT DISTINCT [Group],
('[' + (SELECT DISTINCT CONVERT(NVARCHAR(2), Number) + ',' AS [text()]
FROM @Temp T1
WHERE
T1.[Group] = T2.[Group]
FOR XML PATH('')) + ']') [Numbers],
('[' + (SELECT DISTINCT CONVERT(NVARCHAR(2), Letter) + ', ' AS [text()]
FROM @Temp T1
WHERE
T1.[Group] = T2.[Group]
FOR XML PATH('')) + ']') [Letters]
FROM
@Temp T2
/* SOLUTION 2 - No Trailing Commas */
DECLARE @MaxAllowed INT = 100
SELECT DISTINCT [Group],
'[' +
(SELECT STUFF((
SELECT DISTINCT TOP (@MaxAllowed)
', ', CONVERT(NVARCHAR(2), Number) AS 'data()'
FROM
@Temp T1
WHERE
T1.[Group] = T2.[Group]
FOR XML PATH('')), 1, 2, '')) + ']' [Numbers],
'[' +
(SELECT STUFF((
SELECT DISTINCT TOP (@MaxAllowed)
', ', CONVERT(NVARCHAR(2), Letter) AS 'data()'
FROM
@Temp T1
WHERE
T1.[Group] = T2.[Group]
FOR XML PATH('')), 1, 2, '')) + ']' [Letters]
FROM
@Temp T2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment