Условная сумма в SQL (SAS) (эквивалент SUMIFS)

#sql #sas #sumifs

#sql #sas #sumifs

Вопрос:

Допустим, я работаю под SAS, например, и у меня есть 2 таблицы:

Таблица1:

 Id  Item
1   A
1   B
1   C
2   B
2   D
3   C
3   E
3   F
  

Таблица 2:

 Id  Item    Amount
1   A   99
2   C   100
1   B   100
2   A   90
1   A   93
3   B   92
1   E   93
2   B   99
1   A   93
  

Теперь я хотел бы взять условную сумму для моей таблицы1 из таблицы2 (когда идентификатор и элемент совпадают).

 Id  Item    Want
1   A   285
1   B   100
1   C   0
2   B   99
2   D   0
3   C   0
3   E   0
3   F   0
  

Итак, что я должен делать в SQL?

Заранее спасибо.

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

1. Я бы попробовал коррелированный подзапрос.

2. Можете ли вы объяснить подробно?

3. Можете ли вы объяснить, что вы делаете? Что это sum conditional значит? Вы просто просите сгруппировать по идентификатору и ЭЛЕМЕНТУ?

Ответ №1:

Используйте коррелированный подзапрос для суммирования:

 select t1.Id, t1.Item,
       (select sum(t2.amount) from table2 t2 where t2.id = t1.id and t2.item = t1.item)
from table1 t1 
  

Ответ №2:

Для меня это похоже на агрегацию, с left join :

 select t1.id, t1.item,
       coalesce(sum(t2.amount), 0) as want
from table1 t1 left join
     table2 t2
     on t1.id = t2.id and t2.item = t2.item
group by t1.id, t1.item;