Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Truy vấn SQL để sử dụng cột làm công thức tính giá trị

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);

SQLFiddle DEMO

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lấy các cột cơ bản của một chế độ xem dựa trên tập hợp kết quả của nó

  2. SQL Server 2008 so sánh hai bảng trong cùng một cơ sở dữ liệu và cột nhận được thay đổi

  3. Cách tạo truy vấn tổng hợp trong máy chủ sql mà không có hàm tổng hợp

  4. CLR:Multi Param Aggregate, Argument không có trong đầu ra cuối cùng?

  5. Mã hóa sao lưu cơ sở dữ liệu SQL Server