Dynamisk fråga är den (enda) vägen att gå och det är inte så komplicerat:
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 måste vara medveten om hur benäget för fel detta är. Om värdet på formelkolumnen inte är giltigt bryts formelfrågan.
redigera :går med UNION
istället för UNION ALL
på grund av att samma formel visas i flera rader
redigera2 :Plan B - Istället för att köra en massa samma urvalsfrågor och göra distinkta resultat, är det bättre att göra distinkta formler i början:
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 - lagt till några rader till