Dynamický dotaz je (jediný) způsob, jak jít a není to tak složité:
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 musíte si být vědomi toho, jak je to náchylné k chybám. Pokud hodnota sloupce Vzorec není platná, přeruší dotaz na vzorec.
upravit :jít s UNION
místo UNION ALL
protože stejný vzorec se objevuje ve více řádcích
upravit2 :Plán B – Místo spouštění hromady stejných výběrových dotazů a rozlišování výsledků je lepší vytvořit na začátku odlišné vzorce:
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 – přidáno několik dalších řádků