Вам понадобится таблица Tally , чтобы сделать следующее, но она будет бить курсор и будет динамически расти со следующей выпущенной ОС. Ваш счетный стол тоже должен быть нулевым.
EDIT: исправлена опечатка и добавлена вторая версия
Версия 1 (у вас нет таблицы подсчета):
Это создает таблицу чисел на лету, используя sys.all_columns. Есть много способов сделать это, но вы поняли идею.
;WITH Tally(N)
AS (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) - 1 --minus one to make this zero based
FROM sys.all_columns C)
SELECT OS + CASE WHEN N > 0 THEN ' SP' + CAST(B.N AS char(1))
ELSE ''
END
FROM dbo.Test A
INNER JOIN Tally B ON B.N >= A.MinSp
AND B.N <= A.MaxSp
Вторая версия (у вас есть таблица подсчета, основанная на нуле):
SELECT OS + CASE WHEN N > 0 THEN ' SP' + CAST(B.N AS char(1))
ELSE ''
END
FROM dbo.Test A
INNER JOIN dbo.Tally B ON B.N >= A.MinSp
AND B.N <= A.MaxSp