Zapytanie dynamiczne to (jedyna) droga do zrobienia i nie jest to takie skomplikowane:
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);
Ale musisz mieć świadomość, jak bardzo jest to podatne na błędy. Jeśli wartość kolumny Formuła jest nieprawidłowa, przerywa zapytania formuły.
edytuj :przejście z UNION
zamiast UNION ALL
ponieważ ta sama formuła pojawia się w wielu wierszach
edytuj2 :Plan B — Zamiast uruchamiać kilka takich samych zapytań wybierających i odróżniać wyniki, lepiej na początku utworzyć odrębne formuły:
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 - dodano jeszcze kilka wierszy