Как уже говорили другие, это проблема пробелов и островков, поэтому вам нужно выяснить, какие числа являются началом последовательности, а какие - концом последовательности.
Я сделал это, используя два подзапросы и их объединение:
SELECT CASE
WHEN startSeq.Col1 = endSeq.Col1
THEN '[' + CONVERT(VARCHAR(2),startSeq.Col1) +']'
ELSE '[' + CONVERT(VARCHAR(2),startSeq.Col1) + '-' + CONVERT(VARCHAR(2),endSeq.Col1) + ']'
END
FROM (
SELECT Col1,
ROW_NUMBER() OVER(ORDER BY Col1) AS RowN
FROM Nums a
WHERE NOT EXISTS (
SELECT Col1
FROM Nums b
WHERE b.Col1 = a.Col1 - 1
)
) startSeq
JOIN (
SELECT Col1,
ROW_NUMBER() OVER(ORDER BY Col1) AS RowN
FROM Nums a
WHERE NOT EXISTS (
SELECT Col1
FROM Nums b
WHERE b.Col1 = a.Col1 + 1
)
) endSeq
ON startSeq.RowN = endSeq.RowN