動的クエリは (唯一の) 方法であり、それほど複雑ではありません:
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 :プラン B - 一連の同じ選択クエリを実行して結果を区別する代わりに、最初に個別の式を作成することをお勧めします:
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 - さらにいくつかの行を追加