Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Web > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 20.11.2012, 20:07   #1
Кристина *
Пользователь
 
Регистрация: 14.11.2012
Сообщений: 15
Репутация: 10
По умолчанию Запрос по стандартной базе Oracle

Здравствуйте!
В стандартной базе HR нужно создать запрос, который выводил бы информацию об управляющем каждого подразделения, число работников, которые ему подчиняются, и число работников, которые ему подчиняются и при этом работают в этом же подразделении.
По отдельности получается так:

Код:

select d.manager_id, d.department_id, d.department_name, count(e.manager_id) as "COUNT_1"
from hr.departments d
left outer join hr.employees e on (e.manager_id=d.manager_id)
where d.manager_id is not null
group by d.manager_id,d.department_id,d.department_name
order by 2

Код:

select d.manager_id, d.department_id, d.department_name, count(e1.manager_id) as "COUNT_2"
from hr.departments d
left outer join hr.employees e1 on (e1.manager_id=d.manager_id and e1.department_id=d.department_id)
where d.manager_id is not null
group by d.manager_id,d.department_id,d.department_name
order by 2

Как их совместить?

Последний раз редактировалось Stilet; 20.11.2012 в 20:13.
Кристина * вне форума   Ответить с цитированием
Старый 20.11.2012, 20:13   #2
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,842
Репутация: 6832
По умолчанию

Между ними напиши слово "UNION"
__________________
I'm learning to live...
Stilet вне форума   Ответить с цитированием
Старый 20.11.2012, 20:22   #3
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 18,070
Репутация: 6385
По умолчанию

UNION не надо, можно в одном запросе
Код:

select d.manager_id, d.department_id, d.department_name, count(e.manager_id) as "COUNT_1",
    SUM(CASE WHEN e1.department_id=d.department_id THEN 1 ELSE 0 END) AS "COUNT_2"
  from hr.departments d
  left outer join hr.employees e on (e.manager_id=d.manager_id)
  where d.manager_id is not null
  group by d.manager_id,d.department_id,d.department_name
  order by 2

__________________
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар на форуме   Ответить с цитированием
Старый 20.11.2012, 20:31   #4
Кристина *
Пользователь
 
Регистрация: 14.11.2012
Сообщений: 15
Репутация: 10
По умолчанию

Нужно вывести два столбца, которые бы считались независимо друг от друга. Поэтому UNION не подходит. На второй вариант Oracle ругается
Кристина * вне форума   Ответить с цитированием
Старый 20.11.2012, 20:35   #5
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 18,070
Репутация: 6385
По умолчанию

Там должен быть аналог CASE. И там ошибочка - вместо e1.department_id нужно e.department_id
__________________
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 20.11.2012 в 20:37.
Аватар на форуме   Ответить с цитированием
Старый 20.11.2012, 20:35   #6
Кристина *
Пользователь
 
Регистрация: 14.11.2012
Сообщений: 15
Репутация: 10
По умолчанию

Нашла ошибку, заработало. Спасибо!
Кристина * вне форума   Ответить с цитированием
Старый 20.11.2012, 21:01   #7
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,842
Репутация: 6832
По умолчанию

Код:

SUM(decode(e1.department_id=d.department_id,1,0)) AS "COUNT_2"

Если не ошибаюсь.
__________________
I'm learning to live...
Stilet вне форума   Ответить с цитированием
Старый 20.11.2012, 22:08   #8
Кристина *
Пользователь
 
Регистрация: 14.11.2012
Сообщений: 15
Репутация: 10
По умолчанию

Попробовала так, ошибку выдает
Кристина * вне форума   Ответить с цитированием
Старый 20.11.2012, 22:51   #9
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,842
Репутация: 6832
По умолчанию

Ок. Если ситуация разрешилась оставим этот вариант.
__________________
I'm learning to live...
Stilet вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос к базе serg-php PHP 8 24.07.2011 16:56
Вопролс по стандартной базе БОРЕЙ незнайка315 Microsoft Office Access 1 01.06.2011 10:59
Подключение к базе Oracle BleStaR Java Базы данных (JDBC, JPA, Hibernate) 0 24.10.2010 09:58
подключение к базе ORACLE cowboy БД в Delphi 1 17.09.2009 16:48
подключение к базе Oracle при помощи php Paul Hindenburg PHP 2 28.10.2008 01:06


22:08.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru