Dynamische zoekopdracht is de (enige) manier om te gaan en het is niet zo ingewikkeld:
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);
Maar u moet zich ervan bewust zijn hoe gevoelig dit is voor fouten. Als de waarde van de kolom Formule geen geldige formule is, wordt de query afgebroken.
bewerken :gaan met UNION
in plaats van UNION ALL
omdat dezelfde formule in meerdere rijen voorkomt
edit2 :Plan B - In plaats van een heleboel dezelfde geselecteerde zoekopdrachten uit te voeren en resultaten te onderscheiden, is het beter om aan het begin verschillende formules te maken:
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 - nog een paar rijen toegevoegd