2015-01-23 3 views
-3

мне нужно оценить формулу в SQL Server 2008Разделить используя формулу из другой таблицы в SQL

Таблица 1 содержит

 
Entity Value 
A  2424053.500000 
B  1151425.412500 
C  484810.700000 

Таблица 2 содержит

 
Entity Formula 
A  (2100*(1-0.0668)*24*mday*10) 
B  (1000*(1-0.0575)*24*mday*10) 
C  (1260*(1-0.09)*24*mday*10) 

Где MDAY это количество дней от пользователя. Тип данных Формулы - это строка.

Мне нужно рассчитать выход значения/формула для каждого объекта вы можете предоставить мне запрос на тот же

+0

каков тип данных столбцов в таблице 2? – Jodrell

ответ

0

Пример решения для SQL Server 2008, настроить в соответствии с требованиями ...

IF EXISTS (SELECT * FROM sys.tables WHERE object_id = object_id('EntityValue')) 
BEGIN 
    DROP TABLE EntityValue; 
END; 

CREATE TABLE EntityValue 
(
    Id CHAR(1), 
    mdayValue DECIMAL(13, 6) 
) 

INSERT INTO EntityValue 
    VALUES ('1', 2424053.500000) 
    , ('2', 1151425.412500) 
    , ('3', 484810.700000) 

IF EXISTS (SELECT * FROM sys.tables WHERE object_id = object_id('EntityFormula')) 
BEGIN 
    DROP TABLE EntityFormula; 
END; 

CREATE TABLE EntityFormula 
(
    Id CHAR(1), 
    Formula NVARCHAR(MAX) 
) 

INSERT INTO EntityFormula 
    VALUES ('1', '(2100*(1-0.0668)*24*mday*10)') 
    , ('2', '(1000*(1-0.0575)*24*mday*10)') 
    , ('3', '(1260*(1-0.09)*24*mday*10)') 


DECLARE @FormulaTable AS TABLE 
    (
     RowId INT IDENTITY(1,1) 
     ,Formula NVarchar(max) 
    ); 

INSERT INTO @FormulaTable (Formula) 
SELECT Formula = REPLACE(eFormula.Formula, 'mday', CAST(eValue.mdayValue AS NVARCHAR(MAX))) 
FROM EntityFormula AS eFormula 
    INNER JOIN EntityValue AS eValue ON eValue.ID = eFormula.ID; 

DECLARE @TSql NVarchar(max), @CurrentRowId INT; 
SET @CurrentRowId = 1; 
WHILE(1=1) 
BEGIN 

    SELECT @TSql = 'SELECT ' + Formula 
    FROM @FormulaTable 
    WHERE RowID = @CurrentRowId 

    IF(@@ROWCOUNT = 0) 
    BEGIN 
     BREAK; 
    END 

    EXEC sp_executesql @Tsql 

    SET @CurrentRowId = @CurrentRowId + 1; 
END 
+0

У меня нет возможности использовать курсоры или циклы ... также вы заменяете mday на значение из первой таблицы. Будет введен вход от пользователя «mday = 31» ..i нужно разделить значение в первой таблице с вычисленным значением формулы – xoanon

+0

Извините, вы не указали, как эти две таблицы были связаны или будут использоваться. Не уверен, как вы достигнете этого без какой-либо формы манипуляции с строкой и выполнения SQL. – Will

Смежные вопросы