Динамичната заявка е (единственият) начин и не е толкова сложен:
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);
Но трябва да сте наясно колко податливо е това на грешки. Ако стойността на колоната с формула не е валидна, заявката за формула се прекъсва.
редактиране :става с UNION
вместо UNION ALL
поради една и съща формула, която се появява в няколко реда
редактиране2 :План Б - Вместо да изпълнявате куп едни и същи заявки за избор и да правите различни резултати, по-добре да правите различни формули в началото:
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 - добавени още няколко реда