La consulta dinámica es el (único) camino a seguir y no es tan complicado:
DECLARE @query NVARCHAR(MAX) = '';
SELECT @query = @query + '
UNION
SELECT ItemID, Price, Size, Formula, ' + Formula + ' AS CalcValue FROM YourTable WHERE Formula = ''' + Formula + ''' '
FROM YourTable;
SET @query = STUFF(@query,1,8,'');
PRINT @query;
EXEC (@query);
Pero debe ser consciente de cuán propenso a errores es esto. Si el valor de la columna Fórmula no es válido, la consulta de fórmula se interrumpe.
editar :va con UNION
en lugar de UNION ALL
debido a que la misma fórmula aparece en varias filas
editar2 :Plan B:en lugar de ejecutar un montón de las mismas consultas de selección y diferenciar los resultados, es mejor crear fórmulas distintas al principio:
DECLARE @query NVARCHAR(MAX) = '';
WITH CTE_DistinctFormulas AS
(
SELECT DISTINCT Formula FROM YourTable
)
SELECT @query = @query + '
UNION ALL
SELECT ItemID, Price, Size, Formula, ' + Formula + ' AS CalcValue FROM YourTable WHERE Formula = ''' + Formula + ''' '
FROM CTE_DistinctFormulas;
SET @query = STUFF(@query,1,12,'');
PRINT @query;
EXEC (@query);
SQLFiddle DEMO 2:se agregaron algunas filas más