#sql #sql_server
Есть таблицы dbo.application, dbo.action, dbo.ogpo_dept, dbo.employees
| ID | ins_name | action | | ID | Name |
-------------------------- -------------
| 1 | Аскар | 21 | | 21 | Стикер |
| 2 | Шыназ | 18 | | 18 | Защита |
| 3 | Берик | null |
| 4 | Берик | 18 |
| ID | Name | | ID | FullName | dept_id |
--------------------------- ---------------------------
| 5 | Департамент продаж | | 1 | Mike | 5 |
Запрос:
select od.name as dept_name, e.Fullname, oac.name, COUNT(oa.id) total
from dbo.ogpo_dept od
inner join dbo.employees e on e.dept_id = od.id
inner join dbo.application oa on oa.dept_id = od.id
inner join dbo.action oac on oac.id = oa.[action]
Group By dept_name, e.Fullname, oac.name, oa.[action]
Запрос выводит список договоров агента только с акциями, а мне нужно чтобы возвращалась
договора и без акции и с акциями. Как добавить без акции т.е с null.
| 3 | Берик | null |
Ну в итоге результат должен быть:
| dept_name | Fullname | name | total |
--------------------------------------------------
|Департамент продаж | Аскар | Стикер | 591 |
|Головной офис | Берик | Защита | 54 |
|Головной офис | Берик | null | 5 |
Ответы
Ответ 1
Используй LEFT OUTER JOIN там где нужно выводить NULL select od.name as dept_name, e.Fullname, oac.name, COUNT(oa.id) total from dbo.ogpo_dept od left outer join dbo.employees e on e.dept_id = od.id left outer join dbo.application oa on oa.dept_id = od.id left outer join dbo.action oac on oac.id = oa.[action] Group By dept_name, e.Fullname, oac.name, oa.[action]Ответ 2
При составлении SQL запросов, получающих данные из нескольких таблиц часто возникает необходимость указать, в каких колонках NULL допустим, а в каких нет. Единственный способ решения проблемы - использование одной из разновидностей JOIN. Бывают LEFT JOIN, RIGHT JOIN, INNER JOIN и OUTER JOIN (левый, правый, внутренний и наружный). Разницу между ними проще понять визуально.
Комментариев нет:
Отправить комментарий