sql >> Database teknologi >  >> RDS >> Sqlserver

SQL-forespørgsel til at bruge kolonne som en formel til at beregne værdi

Dynamisk forespørgsel er den (eneste) vej at gå, og det er ikke så kompliceret:

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 skal være opmærksom på, hvor udsat for fejl dette er. Hvis værdien af ​​formelkolonnen ikke er gyldig, bryder formelforespørgslen.

rediger :går med UNION i stedet for UNION ALL på grund af den samme formel, der vises i flere rækker

rediger2 :Plan B - I stedet for at køre en masse af de samme udvalgte forespørgsler og gøre forskellige resultater, er det bedre at lave forskellige formler i begyndelsen:

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 - tilføjet nogle flere rækker



  1. Kan jeg sammenkæde flere MySQL-rækker i ét felt?

  2. Access dataverse connector er nu tilgængelig for test

  3. 5 måder at kontrollere, om der findes en tabel i PostgreSQL

  4. Analyse af MS SQL Server for dem, der ser det for første gang