Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Информация по отделам, где надо отобразить количество сотрудников и данные начальников  [new]
Castorp
Member

Откуда:
Сообщений: 10
Здравствуйте. Запутался немного. Есть 3 таблицы (Картинку приложил)
Нужно вывести информацию по отделам
  • Наименование отдела
  • Имя руководителя
  • Оклад руководителя
  • Количество подчиненных

    Первые 3 пункта и отдельно 4 получается вывести, но не могу совместить вывод информации.
    Вывод количества подчиненных в каждом отделе:
    select  Department.DepartmentID, count (Department.DepartmentID) as [Podch]
    from Employee join Staff on Employee.EmployeeID=Staff.EmployeeID join Department on Staff.DepartmentID=Department.DepartmentID and Employee.EmployeeID  not in (Department.ChieffEmployeeID) 
    group by Department.DepartmentID
    


    Вывод остальной информации:
    select Employee.Name, Department.Name, Staff.Salary
    from Employee,Department,Staff 
    where Employee.EmployeeID=Staff.EmployeeID and  Employee.EmployeeID=Department.ChieffEmployeeID
    

    Как это можно объединить?
  • 15 фев 17, 11:33    [20213252]     Ответить | Цитировать Сообщить модератору
     Re: Информация по отделам, где надо отобразить количество сотрудников и данные начальников  [new]
    TaPaK
    Member

    Откуда: Kiev
    Сообщений: 6802
    Castorp,

    select Employee.Name, Department.Name, Staff.Salary, COUNT(*) OVER (PARTITION BY Department.DepartmentID)...
    15 фев 17, 11:35    [20213268]     Ответить | Цитировать Сообщить модератору
     Re: Информация по отделам, где надо отобразить количество сотрудников и данные начальников  [new]
    Castorp
    Member

    Откуда:
    Сообщений: 10
    TaPaK, спасибо, что ответили. Не получается так. Количество подчиненных выводит 1 в каждом отделе
    15 фев 17, 11:42    [20213300]     Ответить | Цитировать Сообщить модератору
     Re: Информация по отделам, где надо отобразить количество сотрудников и данные начальников  [new]
    iljy
    Member

    Откуда:
    Сообщений: 8711
    Castorp,

    а в чем проблема соединить два запроса по DepartmentID?
    15 фев 17, 12:00    [20213388]     Ответить | Цитировать Сообщить модератору
     Re: Информация по отделам, где надо отобразить количество сотрудников и данные начальников  [new]
    TaPaK
    Member

    Откуда: Kiev
    Сообщений: 6802
    Castorp,

    не дочитал... например так
    ; WITH xx as
    (
    select  Department.DepartmentID, count (Department.DepartmentID) as [Podch]
    from Employee join Staff on Employee.EmployeeID=Staff.EmployeeID join Department on Staff.DepartmentID=Department.DepartmentID and Employee.EmployeeID  not in (Department.ChieffEmployeeID) 
    group by Department.DepartmentID
    ) 
    SELECT 
    *
    FROM xx a 
    JOIN Department b
    ON
     b.DepartmentID = a.DepartmentID
    JOIN 
    Employee,
    JOIN Department,
    JOIN Staff 
    where Employee.EmployeeID=Staff.EmployeeID and  Employee.EmployeeID=Department.ChieffEmployeeID
    
    15 фев 17, 12:03    [20213408]     Ответить | Цитировать Сообщить модератору
     Re: Информация по отделам, где надо отобразить количество сотрудников и данные начальников  [new]
    Castorp
    Member

    Откуда:
    Сообщений: 10
    iljy, Не очень понимаю, недавно sql изучаю. Уже просто запутался не вижу того, что на поверхности лежит, наверное. Подробнее не подскажете
    15 фев 17, 12:08    [20213440]     Ответить | Цитировать Сообщить модератору
     Re: Информация по отделам, где надо отобразить количество сотрудников и данные начальников  [new]
    Castorp
    Member

    Откуда:
    Сообщений: 10
    TaPaK, ошибка выдается. Где where "An expression of non-boolean type specified in a context where a condition is expected"
    15 фев 17, 12:15    [20213473]     Ответить | Цитировать Сообщить модератору
     Re: Информация по отделам, где надо отобразить количество сотрудников и данные начальников  [new]
    TaPaK
    Member

    Откуда: Kiev
    Сообщений: 6802
    Castorp
    TaPaK, ошибка выдается. Где where "An expression of non-boolean type specified in a context where a condition is expected"
    ну блин, там пол запроса не написано, допишите сами, та часть вам извесна
    15 фев 17, 12:16    [20213482]     Ответить | Цитировать Сообщить модератору
     Re: Информация по отделам, где надо отобразить количество сотрудников и данные начальников  [new]
    iljy
    Member

    Откуда:
    Сообщений: 8711
    Castorp
    iljy, Не очень понимаю, недавно sql изучаю. Уже просто запутался не вижу того, что на поверхности лежит, наверное. Подробнее не подскажете


    with q1 as(
        ваш первый запрос
    ),
    q2 as (
       ваш второй запрос
    )
    select * from q1 join q2 on q1.DepartmentID = q2.DepartmentID 
    
    15 фев 17, 12:30    [20213533]     Ответить | Цитировать Сообщить модератору
     Re: Информация по отделам, где надо отобразить количество сотрудников и данные начальников  [new]
    Castorp
    Member

    Откуда:
    Сообщений: 10


    К сообщению приложен файл. Размер - 9Kb
    15 фев 17, 13:02    [20213735]     Ответить | Цитировать Сообщить модератору
     Re: Информация по отделам, где надо отобразить количество сотрудников и данные начальников  [new]
    Castorp
    Member

    Откуда:
    Сообщений: 10
    iljy, я понял вашу идею объединения по совпадающему DepartmentID. Но на with ругается почему то
    15 фев 17, 14:09    [20214149]     Ответить | Цитировать Сообщить модератору
     Re: Информация по отделам, где надо отобразить количество сотрудников и данные начальников  [new]
    Castorp
    Member

    Откуда:
    Сообщений: 10
    Всем большое спасибо! Разобрался! Туплю, 2 дня не спал, разбираюсь с sql
    15 фев 17, 14:13    [20214173]     Ответить | Цитировать Сообщить модератору
     Re: Информация по отделам, где надо отобразить количество сотрудников и данные начальников  [new]
    Castorp
    Member

    Откуда:
    Сообщений: 10
    Хотя нет, нормально работает, если только имена людей не указывать. А иначе ругаться начинает. Пишет что столбец Namе для q2 указан более одного раза
    15 фев 17, 14:22    [20214222]     Ответить | Цитировать Сообщить модератору
     Re: Информация по отделам, где надо отобразить количество сотрудников и данные начальников  [new]
    TaPaK
    Member

    Откуда: Kiev
    Сообщений: 6802
    Castorp,

    отучитесь от синтаксиса FROM table1,Table2.. используйте JOIN с алиасами
    15 фев 17, 14:23    [20214227]     Ответить | Цитировать Сообщить модератору
     Re: Информация по отделам, где надо отобразить количество сотрудников и данные начальников  [new]
    Castorp
    Member

    Откуда:
    Сообщений: 10
    ;with q1 as(
        select   Department.DepartmentID, count (Department.DepartmentID) as [Podch]
    from Employee join Staff on Employee.EmployeeID=Staff.EmployeeID join Department on Staff.DepartmentID=Department.DepartmentID and Employee.EmployeeID  not in (Department.ChieffEmployeeID) 
    group by Department.DepartmentID
    ),
    q2 as (
      select  Department.Name, Staff.Salary, Department.DepartmentID,Employee.Name
    from Employee join Staff on Employee.EmployeeID=Staff.EmployeeID
     join Department on Employee.EmployeeID=Department.ChieffEmployeeID
    
    )
    select * from q1 join q2 on q1.DepartmentID = q2.DepartmentID 
    


    Нормально работает, если в q2 убрать Employee.Name, но мне это поле нужно
    15 фев 17, 14:30    [20214257]     Ответить | Цитировать Сообщить модератору
     Re: Информация по отделам, где надо отобразить количество сотрудников и данные начальников  [new]
    TaPaK
    Member

    Откуда: Kiev
    Сообщений: 6802
    Castorp,

    ну так переименуйте Department.Name as [DepartmentName] или Employee.Name as [EmployeeName] или и то и то
    15 фев 17, 14:34    [20214279]     Ответить | Цитировать Сообщить модератору
     Re: Информация по отделам, где надо отобразить количество сотрудников и данные начальников  [new]
    Castorp
    Member

    Откуда:
    Сообщений: 10
    TaPaK, Вот теперь прекрасно!
    15 фев 17, 14:37    [20214286]     Ответить | Цитировать Сообщить модератору
     Re: Информация по отделам, где надо отобразить количество сотрудников и данные начальников  [new]
    iap
    Member

    Откуда: Москва
    Сообщений: 47144
    TaPaK
    Castorp,

    отучитесь от синтаксиса FROM table1,Table2.. используйте JOIN с алиасами
    А тем более смешивать JOINы с запятыми в одном FROM!
    15 фев 17, 14:39    [20214293]     Ответить | Цитировать Сообщить модератору
    Все форумы / Microsoft SQL Server Ответить