Kueri dinamis adalah (satu-satunya) cara untuk melakukannya dan tidak terlalu rumit:
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);
Tetapi Anda harus menyadari betapa rentannya kesalahan ini. Jika nilai kolom Rumus tidak valid, jeda kueri rumus.
edit :pergi dengan UNION
bukannya UNION ALL
karena rumus yang sama muncul di beberapa baris
edit2 :Rencana B - Daripada menjalankan sekumpulan kueri pemilihan yang sama dan membuat hasil yang berbeda, lebih baik membuat rumus yang berbeda di awal:
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 - menambahkan beberapa baris lagi