Вы можете избежать динамичности c SQL, если знаете максимальный счет:
Начните с таблицы макетов , чтобы смоделировать вашу проблему
DECLARE @tbl TABLE(InitialValue DECIMAL(16,4));
INSERT INTO @tbl VALUES(12000),(20000),(10000);
- Для проверки я использую делитель 4, попробуйте другие числа
DECLARE @divisor DECIMAL(16,4)=4;
- Это запрос
SELECT p.*
FROM
(
SELECT t.InitialValue / @divisor As DivResult
,t.InitialValue
,CONCAT('div',FORMAT(A.Nmbr,'00')) AS ColumnName
FROM @tbl t
CROSS APPLY(SELECT TOP(CAST(@divisor AS INT)) ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) FROM master..spt_values) A(Nmbr)
) t
PIVOT
(MAX(DivResult) FOR ColumnName IN(div01,div02,div03,div04,div05,div06,div07 /*add as many as you might need*/)) p;
Результат
InitialValue div01 div02 div03 div04 div05 div06 div07
10000.0000 2500.000000000000000000000 2500.000000000000000000000 2500.000000000000000000000 2500.000000000000000000000 NULL NULL NULL
12000.0000 3000.000000000000000000000 3000.000000000000000000000 3000.000000000000000000000 3000.000000000000000000000 NULL NULL NULL
20000.0000 5000.000000000000000000000 5000.000000000000000000000 5000.000000000000000000000 5000.000000000000000000000 NULL NULL NULL
Как видите, неиспользуемые столбцы возвращаются, но остаются NULL.
Я бы предпочел этот подход, а не Dynami c sql, так как в большинстве случаев потребитель лучше, если набор результатов и его структура фиксирована и предсказуема ...
Подсказка: при необходимости вы можете добавить делитель в набор результатов ...