Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2014, 18:30   #1
Alex3880
 
Регистрация: 30.11.2014
Сообщений: 6
По умолчанию Помогите, пожалуйста, найти ошибку в Select..case

Помогите, пожалуйста.
Необходимо разбить работников по группам:
1. Начальники департаментов.
2. Менеджеры (имеют подчинённых, но не являются начальниками департаментов).
3. Простые работники (не имеют подчиненных и не являются начальниками департаментов).

У меня получился вот такой код. Ошибку не выдает, но и работает не правильно.

Код:
SELECT emp.EMPLOYEE_ID, dep.DEPARTMENT_ID, dep.MANAGER_ID, emp.salary,
case 
  when emp.EMPLOYEE_ID = dep.MANAGER_ID then 'dep_manager'
  when dep.MANAGER_ID is null and emp.employee_id = emp.manager_id then 'manager'
  else 'simple_worker' end as "Category"
FROM EMPLOYEES emp
LEFT JOIN DEPARTMENTS dep ON emp.EMPLOYEE_ID = dep.MANAGER_ID
ORDER BY dep.MANAGER_ID
;

Последний раз редактировалось Alex3880; 30.11.2014 в 18:32. Причина: не отображается картинка
Alex3880 вне форума Ответить с цитированием
Старый 30.11.2014, 19:15   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

По-моему это в корне неверно...
Покажи структуру таблиц.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.11.2014, 19:18   #3
Alex3880
 
Регистрация: 30.11.2014
Сообщений: 6
По умолчанию

Это стандартная схема HR Oracle

Код:
desc employees
Name           Null     Type         
-------------- -------- ------------ 
EMPLOYEE_ID    NOT NULL NUMBER(6)    
FIRST_NAME              VARCHAR2(20) 
LAST_NAME      NOT NULL VARCHAR2(25) 
EMAIL          NOT NULL VARCHAR2(25) 
PHONE_NUMBER            VARCHAR2(20) 
HIRE_DATE      NOT NULL DATE         
JOB_ID         NOT NULL VARCHAR2(10) 
SALARY                  NUMBER(8,2)  
COMMISSION_PCT          NUMBER(2,2)  
MANAGER_ID              NUMBER(6)    
DEPARTMENT_ID           NUMBER(4)
Код:
desc departments
Name            Null     Type         
--------------- -------- ------------ 
DEPARTMENT_ID   NOT NULL NUMBER(4)    
DEPARTMENT_NAME NOT NULL VARCHAR2(30) 
MANAGER_ID               NUMBER(6)    
LOCATION_ID              NUMBER(4)

Последний раз редактировалось Stilet; 30.11.2014 в 19:23.
Alex3880 вне форума Ответить с цитированием
Старый 30.11.2014, 19:26   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А что эти все поля означают ты разобрался?
Я правильно понял - это учебная задача?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.11.2014, 19:30   #5
Alex3880
 
Регистрация: 30.11.2014
Сообщений: 6
По умолчанию

Да, это учебная задача. Всю базу уже наизусть выучил. Начальники департаментов выводятся правильно. А дальше полная чушь получается.
Alex3880 вне форума Ответить с цитированием
Старый 30.11.2014, 20:18   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Так а что каждое поле означает? Я например не в курсе.
Какое из полей там означает должность?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.11.2014, 20:34   #7
Alex3880
 
Регистрация: 30.11.2014
Сообщений: 6
По умолчанию

Должности находятся отдельно в таблице JOB. Названия должностей очень неудобные и можно запутаться кто есть кто.
Изображения
Тип файла: jpg job.JPG (66.3 Кб, 38 просмотров)
Тип файла: jpg dep.JPG (68.8 Кб, 38 просмотров)

Последний раз редактировалось Alex3880; 01.12.2014 в 12:15.
Alex3880 вне форума Ответить с цитированием
Старый 30.11.2014, 20:47   #8
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,770
По умолчанию

А это точно задача на select case, а не на connect by/start with, например? Если на select case, то для трех уровней таблица departments должна участвовать в запросе три раза под разными синонимами.
Vapaamies вне форума Ответить с цитированием
Старый 30.11.2014, 20:51   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Alex3880
Хе! Так ты всетки не разобрался с заданием ))
Выставил две таблицы, в то время как в решении участвуют три.
Мой ответ: Присоединяй таблицу с должностями, и убери твой case. Он тебе ничем не поможет в этом случае.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.11.2014, 20:54   #10
Alex3880
 
Регистрация: 30.11.2014
Сообщений: 6
По умолчанию

Точно, как не кручу не могу отделить менеджера от простого рабочего
Alex3880 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите найти ошибку пожалуйста Petrichor Паскаль, Turbo Pascal, PascalABC.NET 2 22.03.2014 19:29
C# пожалуйста помогите найти ошибку Olgazag Свободное общение 16 11.12.2013 07:33
помогите пожалуйста найти ошибку. ksu25 Паскаль, Turbo Pascal, PascalABC.NET 2 07.10.2009 20:38
Пожалуйста помогите найти ошибку =) Обледеневший Общие вопросы C/C++ 6 19.09.2009 14:13