sql >> Databasteknik >  >> RDS >> Sqlserver

SQL-fråga för att använda kolumn som en formel för att beräkna värde

Dynamisk fråga är den (enda) vägen att gå och det är inte så komplicerat:

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

Men du måste vara medveten om hur benäget för fel detta är. Om värdet på formelkolumnen inte är giltigt bryts formelfrågan.

redigera :går med UNION istället för UNION ALL på grund av att samma formel visas i flera rader

redigera2 :Plan B - Istället för att köra en massa samma urvalsfrågor och göra distinkta resultat, är det bättre att göra distinkta formler i början:

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 - lagt till några rader till



  1. Hur man använder en eller flera OR och AND i mysql-fråga

  2. Hur många kolumner i MySQL-tabellen

  3. Hur man summerar värdet av pivoterade kolumner och lägger till det i en annan pivoterad kolumn

  4. Hur implementerar man lång polling med socket.io?