Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL-Abfrage zur Verwendung der Spalte als Formel zur Berechnung des Werts

Dynamische Abfragen sind der (einzige) Weg und nicht so kompliziert:

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

Aber Sie müssen sich darüber im Klaren sein, wie fehleranfällig das ist. Wenn der Wert der Formelspalte ungültig ist, bricht die Formelabfrage ab.

bearbeiten :gehen mit UNION statt UNION ALL weil dieselbe Formel in mehreren Zeilen erscheint

bearbeiten2 :Plan B - Anstatt eine Reihe gleicher Auswahlabfragen auszuführen und die Ergebnisse zu unterscheiden, ist es besser, am Anfang unterschiedliche Formeln zu erstellen:

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 - einige weitere Zeilen hinzugefügt