Dynamisk forespørgsel er den (eneste) vej at gå, og det er ikke så kompliceret:
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);
Men du skal være opmærksom på, hvor udsat for fejl dette er. Hvis værdien af formelkolonnen ikke er gyldig, bryder formelforespørgslen.
rediger :går med UNION
i stedet for UNION ALL
på grund af den samme formel, der vises i flere rækker
rediger2 :Plan B - I stedet for at køre en masse af de samme udvalgte forespørgsler og gøre forskellige resultater, er det bedre at lave forskellige formler i begyndelsen:
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 - tilføjet nogle flere rækker