обновление транзакций с предварительно сгруппированными данными

#sql #sql-server

#sql #sql-сервер

Вопрос:

У меня есть таблица транзакций. Мне нужно обновить таблицу предварительно агрегированным значением из другой таблицы, а затем развернуть их до различных уровней детализации.

Однако конечный результат неверен. Надеюсь, кто-нибудь здесь сможет помочь мне разобраться, как к этому подступиться.

 Table A:

 TransID   BankName   Location   Region  SaleType  MonthlyPayment Weight

   1        BOA        Boston     East    F          3000           3
   2        Mellon     Pittsburgh East    C          1000           3
   3        BOA        Boston     East    C          2000           2
   4        BOA        Boston     East               1000           2


 Table B

  BanKname   Location      Region   Sales
  BOA         Boston        East     500
  Mellon      Pittsburgh    East     1000


  Desired Output structure

  BankName    Location   Region   SaleType  AvgSales  AvgMonthlyPayment
  

Проблема в том, что при обновлении и выполнении средневзвешенного значения каждая из транзакций Boston получает 500 продаж. При добавлении общий объем продаж должен составлять 1500, но сейчас он равен 2500.

Если я обновляю таблицу A значением Sales из таблицы B, продажи повторяются для каждого типа продаж — таким образом, это сбрасывает итоговый средний объем продаж.

   update is this: (Added new column sales in A)

    update a
    set a.sales = b.sales
    from tableA a join tableB b on a.bankname=b.bankname and 
    a.location=b.location and a.region = b.region


    weighted average from A is calculated like this:

     select bankname,location,region,saletype, 
     sum(case when sales is not null then sales*weight else 0 
     end)/sum(weight) as avgsales
     , sum(case when monthlypayment is not null then monthlypayment*weight 
     else 0 end)/sum(weight) as avgmonthlyp
     from tableA
     group by bankname,location,region,saletype
  

Для каждого типа продаж продажи обновляются со значением, что увеличивает конечное значение в этот раз.

Как я могу обновить продажи, чтобы BOA получал только 500, а Mellon — только 1000, а общее количество # продаж составило 1500?

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

1. Я, честно говоря, не понимаю, в чем ваша проблема.

2. Проблема в том, что если я обновлю таблицу A данными о продажах из таблицы B, каждая строка в таблице A получит данные о продажах из-за разных типов продаж — таким образом, будет вычеркнуто конечное значение продаж при вычислении его средневзвешенного значения. Итак, вопрос в том, как мне обновить таблицу txns этим агрегированным значением без потери целостности данных

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

4. И вот тут проблема в том, что у меня нет продаж по разным типам продаж — у меня есть только агрегированные продажи. Отсюда и вопрос.

5. Ваше объединение вызывает дублирование, поэтому, вероятно, это недопустимое объединение