如果您知道最大计数,则可以避免使用动态 SQL:
从 mockup-table 开始模拟您的问题
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。
我更喜欢这种方法而不是动态 sql,因为在大多数情况下,如果结果集及其结构是固定且可预测的,那么消费者会更好......
提示:如果需要,您可以将除数添加到结果集中...