Как вычислить строку, используя другое значение из объединенной таблицы

#sql #join #calculation

#sql #Присоединиться #вычисление

Вопрос:

Мне нужно запустить обновление таблицы SQL, используя значение из другой (но почти идентичной) строки в той же таблице, чтобы показать, как разыгрываются разные сценарии продаж.

например

 Starting with:
ITEM, SITE, SUPPLIER, SCENARIO, SALES_VOLUME, PRICE, TOTAL_SALES
1   , A   , X       , S1      , 100         , 10   , 1000
2   , A   , Y       , S1      , 25          , 20   , 500
1   , A   , X       , S2      , {blank}     , 20   , 0 

I would like to update to show:
ITEM, SITE, SUPPLIER, SCENARIO, SALES_VOLUME, PRICE, TOTAL_SALES
1   , A   , X       , 1       , 100         , 10   , 1000
2   , A   , Y       , 1       , 25          , 20   , 500
1   , A   , X       , 2       , {blank}     , 20   , 2000
  

Итак, в принципе, если SCENARIO = S2, мне нужно пересчитать, используя SALES_VOLUME, где SCENARIO = S1

Я попробовал следующее, но это не сработало — я думаю, потому что я пытаюсь указать оба =1 и !=1 в одном и том же поиске.

 UPDATE TABLE1
SET [TOTAL_SALES]   = (t1.[PRICE] * t2.[SALES_VOLUME])
FROM TABLE1 t1
inner join TABLE1 t2
    on  t1.[ITEM]       = t2.[ITEM]
    and t1.[SITE]       = t2.[SITE]
    and t1.[SUPPLIER]   = t2.[SUPPLIER]
    and t1.[SCENARIO]   = 'S1'
WHERE   t1.[SCENARIO]   != 'S1'
  

Я не думаю, что я слишком далек, но просто чувствую, что чего-то не хватает.

Любые указатели будут получены с благодарностью. 🙂

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

1. Пометьте свой вопрос базой данных, которую вы используете.

Ответ №1:

Вы можете попробовать это —

 UPDATE t1
SET [TOTAL_SALES]   = (t1.[PRICE] * t2.[SALES_VOLUME])
FROM TABLE1 t1
inner join TABLE1 t2
    on  t1.[ITEM]       = t2.[ITEM]
    and t1.[SITE]       = t2.[SITE]
    and t1.[SUPPLIER]   = t2.[SUPPLIER]
    and t1.[SCENARIO]   = 'S2'
  WHERE t2.[SCENARIO]   = 'S1';
  

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

1. Спасибо. Это была ссылка на таблицу, которая сбивала меня с толку в первой строке. Я отменил ваши последние 2 записи, и это сработало.