La query dinamica è l'(unica) strada da percorrere e non è così complicata:
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);
Ma devi essere consapevole di quanto sia soggetto a errori. Se il valore della colonna Formula non è valido, la query della formula si interrompe.
modifica :andare con UNION
invece di UNION ALL
a causa della stessa formula che appare in più righe
modifica2 :Piano B - Invece di eseguire le stesse query selezionate e distinguere i risultati, è meglio creare formule distinte all'inizio:
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 - aggiunte altre righe