Вычисление формул на основе алфавита с использованием процедуры sql server

#sql-server #stored-procedures

#sql-сервер #хранимые процедуры

Вопрос:

У меня есть 4 столбца, как показано ниже

 Name          Alphabet     Formula     Value

Total1         A                        20    

Total2         B                        10

Total3         C             A B        

Total4         D             C A B       
  

У меня есть значение для A и B и с помощью хранимой процедуры, как я могу вычислить известные мне значения total3 и total 4..

Комментарии:

1. если это реальная проблема, я бы подумал о ее перепроектировании. это просто принесет целый мир боли, когда формулы начнут усложняться.

2. @havin Всегда SUM есть в формуле?

3. Нет, здесь задействованы вычитание и умножение.. Например, это может быть A B-D или A-B-C ИЛИ A X B XC

4. @tanner как мы можем это сделать .. Можем ли мы сделать это в интерфейсе, например, datatable.. Если это в SP, как мы можем это спланировать..

5. @havin Есть ли какие-либо подобные данные (A B) * C ?

Ответ №1:

Попробуйте использовать SUM внутри хранимой процедуры.

Добавьте SUM(A B) В КАЧЕСТВЕ ABName, SUM(ABName A B) В КАЧЕСТВЕ ABCName внутри вашего запроса

Посмотрите, поможет ли это

Комментарии:

1. Извините, я забыл упомянуть, что столбцы генерируются динамически, а не фиксированными столбцами..

2. Ну, это может сработать, если вы используете другую временную таблицу для хранения предыдущих данных.. таким образом, вы можете получить последнее вычисление для вашего процесса хранения

3. Моя проблема в том, как я распознаю значение формулы и соответственно добавляю, вычитаю или умножаю.. Например, если я беру tempvalue для значения A и соответствующей формулы .. Как я могу распознать строковые типы, такие как ,-,*, из формулы и вычислить соответственно…

4. Объявляйте временную переменную для каждого запроса select. Возможно, вам потребуется вызвать данные для каждой временной переменной, например: ОБЪЯВИТЬ @tmpVariable КАК Int ВЫБЕРИТЕ tmpVariable = YourField ГДЕ Condition = Условие (если есть) затем вставьте переменную tmpVariable в таблицу желаний

5. Я использовал его в основном для ФИКСИРОВАННЫХ столбцов, но в вашем случае это должно сработать. Единственное отличие в том, что мои ИСПРАВЛЕНЫ, а ваши столбцы генерируются.

Ответ №2:

    DECLARE @ValueA as int
   DECLARE @Valueb as int

   select @ValueA=sum(value) from yourTable where alphabet='A'
   select @ValueB=sum(value) from yourTable where alphabet='B'

   update yourTable set value=@ValueA   @ValueB where alphabet='C'
  

Комментарии:

1. Спасибо, столбец генерируется динамически. Он должен получить значение алфавита и связанную с ним формулу и рассчитать стоимость .. Я думаю, ваш ответ лучше всего работает с фиксированными столбцами и значениями в таблице..

2. Я имею в виду, что значения столбцов генерируются динамически.. Сегодня 4 столбца, а завтра будет как Total5 E A B-D