Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Query SQL per utilizzare la colonna come formula per calcolare il valore

La query dinamica è l'(unica) strada da percorrere e non è così complicata:

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

DEMO SQLFiddle

Ma devi essere consapevole di quanto sia soggetto a errori. Se il valore della colonna Formula non è valido, la query della formula si interrompe.

modifica :andare con UNION invece di UNION ALL a causa della stessa formula che appare in più righe

modifica2 :Piano B - Invece di eseguire le stesse query selezionate e distinguere i risultati, è meglio creare formule distinte all'inizio:

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 - aggiunte altre righe