Three logics were used to get the result.
The first finds different letters in each line withCTE
row_number() CTE, .
- concatenate the rows using group by row_number(), .
CREATE TABLE
(name VARCHAR(50))
INSERT INTO
VALUES ('XYXY'),
('AA'),
('XYZXYZ'),
('ABCABCABC');
WITH cte
AS (SELECT Row_number()OVER (ORDER BY name) rn,
Substring(name, 1, 1) AS sub,
1 AS IDX,
name
FROM
WHERE Len(name) > 0
UNION ALL
SELECT rn,Substring(name, IDX + 1, 1) AS sub,
IDX + 1 AS IDX,
name
FROM cte
WHERE IDX < Len(name))
SELECT name INPUT, (SELECT DISTINCT CONVERT(VARCHAR(100), sub)
FROM cte b
WHERE b.rn = a.rn
FOR XML PATH('')) EXPECTED_OUTPUT
FROM cte a
GROUP BY rn ,name
OUTPUT
INPUT EXPECTED_OUTPUT
--------- ---------------
AA A
ABCABCABC ABC
XYXY XY
XYZXYZ XYZ