sql >> Base de Datos >  >> RDS >> Sqlserver

Consulta SQL para usar la columna como fórmula para calcular el valor

La consulta dinámica es el (único) camino a seguir y no es tan 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);

DEMO DE SQLFiddle

Pero debe ser consciente de cuán propenso a errores es esto. Si el valor de la columna Fórmula no es válido, la consulta de fórmula se interrumpe.

editar :va con UNION en lugar de UNION ALL debido a que la misma fórmula aparece en varias filas

editar2 :Plan B:en lugar de ejecutar un montón de las mismas consultas de selección y diferenciar los resultados, es mejor crear fórmulas distintas al principio:

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:se agregaron algunas filas más