Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SQL Query menggunakan kolom sebagai rumus untuk menghitung nilai

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

SQLFiddle DEMO

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menemukan nomor minggu tanggal menurut DATEFIRST

  2. Permintaan yang sama - rencana eksekusi yang berbeda

  3. Nama kolom atau jumlah nilai yang diberikan tidak sesuai dengan definisi tabel

  4. Periksa Apakah Tabel Memiliki Kolom TIMESTAMP di SQL Server dengan OBJECTPROPERTY()

  5. Apakah ada alat untuk membangun pohon hubungan prosedur tersimpan dan fungsi yang digunakan di SQL Server 2008?