Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Requête SQL pour utiliser la colonne comme formule pour calculer la valeur

La requête dynamique est la (seule) solution et ce n'est pas si compliqué :

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

DÉMO SQLFiddle

Mais vous devez être conscient du risque d'erreurs. Si la valeur de la colonne Formule n'est pas valide, la requête de formule s'interrompt.

modifier :aller avec UNION au lieu de UNION ALL car la même formule apparaît sur plusieurs lignes

modifier2 :Plan B - Au lieu d'exécuter plusieurs requêtes de sélection identiques et de différencier les résultats, il est préférable de créer des formules distinctes au début :

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 - ajout de quelques lignes supplémentaires