Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Lexx_SQL Member Откуда: Сообщений: 566 |
Добрый день! Подскажите, пожалуйста, как организовать запрос получения сумм двух разных столбцов разных таблиц. Например,имеем таблицы T1 TName (IDName,Name)-наименование товаров, T2 TOstatok (ID,IDName,Ostatok) - таблица с остатками, T3 TReserv (ID,IDName,Reserv) - таблица с резервами. Если делать Select t1.Name,SUM(t2.Ostatok) From TName T1 Left Join TOStatok T2 ON T1.IDName=T2.IDName GROUP BY t1.Name здесь все понятно и все считает как нужно. Напротив каждого наименования - остаток. Необходимо добавить еще сумму по резервам.Если использовать Left Join то "расползутся" остатки.Как составить запрос? Select t1.Name,SUM(t2.Ostatok),SUM(t3.Reserv) From TName ... |
20 мар 15, 10:16 [17408439] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Сначала просуммировать, а потом уже делать Left Join Сообщение было отредактировано: 20 мар 15, 10:19 |
||
20 мар 15, 10:19 [17408450] Ответить | Цитировать Сообщить модератору |
`
Guest |
нужно сгруппировать и проссумировать в подзапросах, а потом уже их джойнить |
20 мар 15, 10:19 [17408452] Ответить | Цитировать Сообщить модератору |
Lexx_SQL Member Откуда: Сообщений: 566 |
Glory, Если я правильно понял вместо "Left Join TOStatok T2" нужно написать "Left Join (Select SUM(t2.Ostatok) FROM ...)"? Если я не прав, можно небольшой пример. Спасибо. |
20 мар 15, 10:50 [17408615] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
И еще вместо первой таблицы тоже будет аналогичный подзапрос |
||
20 мар 15, 10:51 [17408624] Ответить | Цитировать Сообщить модератору |
a_voronin Member Откуда: Москва Сообщений: 4805 |
Плюс к этому вам возможно надо делать не LEFT, а FULL JOIN. Это зависит от характера ваших данных. |
||||
20 мар 15, 12:38 [17409387] Ответить | Цитировать Сообщить модератору |
гр к
Guest |
+1 Бывает, что есть позиции на складе, но нет в продаже. И наоборот. Так что навроде этого: select coalesce (o.id, r.id) sid, coalesce (o.os,0) ost, coalesce (r.re,0) res from (select id, sum(ostatok) os from osrarok group by id) o full join (select id, sum(reserve) re from reserv group by id) r ЗЫ За правильность не ручаюсь, но мысль понятна. |
||||
20 мар 15, 14:02 [17409885] Ответить | Цитировать Сообщить модератору |
гр к
Guest |
Коррзкаselect coalesce (o.id, r.id) sid, coalesce (o.os,0) ost, coalesce (r.re,0) res from (select id, sum(ostatok) os from osrarok group by id) o full join (select id, sum(reserve) re from reserv group by id) r on r.id = o.id |
20 мар 15, 14:06 [17409897] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |