рассчитывается по формулам, состоит из одной строки и отделяется специальным символом - PullRequest
0 голосов
/ 24 апреля 2019

Тест DDL

with cte as (
    select '0001' ID,1 InputValue,'Qty*2;Qty*5' Formulas union all
    select '0002' ID,2 InputValue,'Qty+4;Qty/5' Formulas 
)
select * into T from cte

--Query Data
ID      ,InputValue ,Formulas       
0001    ,1          ,Qty*2;Qty*5    
0002    ,2          ,Qty+4;Qty/5    

Ожидаемое

вызовите somefunction или sqlquery получите ниже результата

ID      ,InputValue ,Formulas       ,Qty1   ,Qty2
0001    ,1          ,Qty*2;Qty*5    ,2      ,5
0002    ,2          ,Qty+4;Qty/5    ,6      ,0.4

Logic

Формула сокращена на ;
Входное значение использует первую формулу для вычисления поля qty1
Входное значение использует вторую формулу для вычисления поля qty2

Мой тест

В настоящее время мое решение заключается в использовании программирования на C # для решения проблемы

    using (var cn = Connection)
    {
        cn.Open();

        var datas = cn.Query(@"
            with cte as (
                select '0001' ID,1 InputValue,'Qty*2;Qty*5' Formulas union all
                select '0002' ID,2 InputValue,'Qty+4;Qty/5' Formulas 
            )
            select * into #T from cte;
            select * from #T;
        ");

        var result = datas.Select(s => {
            var arr = (s.Formulas as string).Split(';');
            var qtyFor = arr[0].Replace("Qty",  Convert.ToString(s.InputValue));
            var qty1For = arr[1].Replace("Qty",  Convert.ToString(s.InputValue));
            var qty = new DataTable().Compute(qtyFor, string.Empty);
            var qty1 = new DataTable().Compute(qty1For, string.Empty);
            return new {s.ID,s.InputValue,s.Formulas,Qty=qty,Qty1=qty1};
        });

        Console.WriteLine(result);
        /*
            Result:
            ID      ,InputValue ,Formulas       ,Qty1   ,Qty2
            0001    ,1          ,Qty*2;Qty*5    ,2      ,5
            0002    ,2          ,Qty+4;Qty/5    ,6      ,0.4
        */
    }

Онлайн тестовая ссылка


Я знаю, что эта структура таблицы странная, но это старая система без исходного кода, поэтому я не могу исправить структуру таблицы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...