#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. Ваше объединение вызывает дублирование, поэтому, вероятно, это недопустимое объединение