Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL заявка за използване на колона като формула за изчисляване на стойност

Динамичната заявка е (единственият) начин и не е толкова сложен:

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

Но трябва да сте наясно колко податливо е това на грешки. Ако стойността на колоната с формула не е валидна, заявката за формула се прекъсва.

редактиране :става с UNION вместо UNION ALL поради една и съща формула, която се появява в няколко реда

редактиране2 :План Б - Вместо да изпълнявате куп едни и същи заявки за избор и да правите различни резултати, по-добре да правите различни формули в началото:

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 - добавени още няколко реда



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вмъкване в променлива на таблицата с обединение

  2. Защо select SCOPE_IDENTITY() връща десетичен знак вместо цяло число?

  3. Грешка при автоматично създаване на файл на база данни SQLExpress за сайт, който използва AspNetSqlMembershipProvider, но низът за връзка е към SQL Server 2005

  4. Съставен първичен ключ срещу допълнителен идентификационен номер колона?

  5. Позоваване на псевдоним на колона в клауза WHERE