Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zapytanie SQL do użycia kolumny jako formuły do ​​obliczenia wartości

Zapytanie dynamiczne to (jedyna) droga do zrobienia i nie jest to takie skomplikowane:

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 SQLFiddle

Ale musisz mieć świadomość, jak bardzo jest to podatne na błędy. Jeśli wartość kolumny Formuła jest nieprawidłowa, przerywa zapytania formuły.

edytuj :przejście z UNION zamiast UNION ALL ponieważ ta sama formuła pojawia się w wielu wierszach

edytuj2 :Plan B — Zamiast uruchamiać kilka takich samych zapytań wybierających i odróżniać wyniki, lepiej na początku utworzyć odrębne formuły:

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 - dodano jeszcze kilka wierszy



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przypisz login do użytkownika utworzonego bez logowania (SQL Server)

  2. Jak pominąć interwały nakładania się w następującym zapytaniu, aby uzyskać dokładny czas śledzenia w ciągu dnia

  3. Czy istnieje błąd w SqlDataReader.HasRows podczas uruchamiania programu SQL Server 2008?

  4. Jak dodać niestandardowe atrybuty do ciągu połączenia SQL?

  5. 3-cyfrowy kod waluty do symbolu waluty