Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Consulta SQL para usar coluna como fórmula para calcular valor


A consulta dinâmica é o (único) caminho a seguir e não é tão complicado:
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

Mas você deve estar ciente de como isso é propenso a erros. Se o valor da coluna Fórmula não for válido, as quebras de consulta de fórmula.

editar :indo com UNION em vez de UNION ALL porque a mesma fórmula aparece em várias linhas

editar2 :Plano B - Em vez de executar várias consultas de seleção e diferenciar os resultados, é melhor criar fórmulas distintas no início:
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 - adicionadas mais algumas linhas