Dynamische Abfragen sind der (einzige) Weg und nicht so kompliziert:
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);
Aber Sie müssen sich darüber im Klaren sein, wie fehleranfällig das ist. Wenn der Wert der Formelspalte ungültig ist, bricht die Formelabfrage ab.
bearbeiten :gehen mit UNION
statt UNION ALL
weil dieselbe Formel in mehreren Zeilen erscheint
bearbeiten2 :Plan B - Anstatt eine Reihe gleicher Auswahlabfragen auszuführen und die Ergebnisse zu unterscheiden, ist es besser, am Anfang unterschiedliche Formeln zu erstellen:
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 - einige weitere Zeilen hinzugefügt