sql >> Database >  >> RDS >> Sqlserver

SQL-query om kolom te gebruiken als formule om waarde te berekenen

Dynamische zoekopdracht is de (enige) manier om te gaan en het is niet zo ingewikkeld:

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

Maar u moet zich ervan bewust zijn hoe gevoelig dit is voor fouten. Als de waarde van de kolom Formule geen geldige formule is, wordt de query afgebroken.

bewerken :gaan met UNION in plaats van UNION ALL omdat dezelfde formule in meerdere rijen voorkomt

edit2 :Plan B - In plaats van een heleboel dezelfde geselecteerde zoekopdrachten uit te voeren en resultaten te onderscheiden, is het beter om aan het begin verschillende formules te maken:

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 - nog een paar rijen toegevoegd



  1. AngularJS verbinden met mysql met behulp van mijn PHP-service?

  2. MySQL-filter op veel-op-veel

  3. Vind vrije kamer (boekingssysteem)

  4. Hex-tekenreekswaarde invoegen in sql-serverafbeeldingsveld voegt extra 0 toe