Truy vấn động là cách (duy nhất) để thực hiện và nó không quá phức tạp:
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);
Nhưng bạn phải biết điều này dễ mắc lỗi như thế nào. Nếu giá trị của cột Công thức không hợp lệ thì truy vấn công thức sẽ ngắt.
chỉnh sửa :đi với UNION
thay vì UNION ALL
vì cùng một công thức xuất hiện trong nhiều hàng
chỉnh sửa2 :Kế hoạch B - Thay vì chạy một loạt các truy vấn được chọn giống nhau và tạo ra các kết quả khác biệt, tốt hơn nên tạo các công thức riêng biệt ngay từ đầu:
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 - đã thêm một vài hàng nữa