SQL, Вывести имена преподавателей в следующем порядке

Я попытался создать новую тему, но не нашел в темах ничего подобного. Короче есть у база данных, созданная в MS SQL Server Management Studio. Есть академия, в которой есть учителя, каждый из которых может быть деканом, заведующим, ассистентом и так далее. В таблице с учителями есть фамилии, имена и так далее. А в остальных(Деканы, ассистенты, заведующие и т.д.) только Id учителя. Так вот задание такое:

Вывести полные имена преподавателей в следующем по-
рядке: деканы факультетов, заведующие кафедрами, пре-
подаватели, кураторы, ассистенты

Я вот написал что-то, но это полная чушь:

select Teachers.Name+' '+Teachers.Surname as [Dean],
Teachers.Name+' '+Teachers.Surname as [Head],
Teachers.Name+' '+Teachers.Surname as [Teacher],
Teachers.Name+' '+Teachers.Surname as [Curator],
Teachers.Name+' '+Teachers.Surname as [Assistant]
from Teachers join Deans on Teachers.Id = Deans.TeacherId
join Heads on Teachers.Id = Heads.TeacherId
join Curators on Teachers.Id = Curators.TeacherId
join Assistants on Teachers.Id = Assistants.TeacherId
group by Teachers.Name, Teachers.Surname

А структура таблиц именно такая нужна? По идее ж тут один человек может сразу несколько ролей исполнять. А если не может, то непонятно зачем таблицы, хватило бы одного поля )

Вот структура:

Типа такого, что ли:

SELECT U.Name,U.Surnamme
  FROM (
    SELECT T.Name,T.Surnamme,1 AS Kind
      FROM Deans D LEFT JOIN Teachers T ON D.TeacherId=T.Id
    UNION
    SELECT T.Name,T.Surnamme,2 AS Kind
      FROM Heads H LEFT JOIN Teachers T ON H.TeacherId=T.Id
    UNION
    SELECT T.Name,T.Surnamme,3 AS Kind
      FROM Lectures L LEFT JOIN Teachers T ON L.TeacherId=T.Id
    UNION
    SELECT T.Name,T.Surnamme,4 AS Kind
      FROM Curators C LEFT JOIN Teachers T ON C.TeacherId=T.Id
    UNION
    SELECT T.Name,T.Surnamme,5 AS Kind
      FROM Assistans A LEFT JOIN Teachers T ON A.TeacherId=T.Id) U
  ORDER BY U.Kind,U.Name,U.Surnamme
1 лайк

Похоже на то

Только вот непонятно, кто есть кто. Как это уточнить?

Ну добавь еще вычисляемое поле в подзапросах с наименование должности, “декан” там или еще кто. И вытащи его во внешний запрос

вместо 1,2…5 прописать кто кем есть. Нет?

Сортировка поломается

Не совсем понимаю, как это сделать.

Поле Kind вычисляемое и числовое. Добавь аналогично в каждый подзапрос символьное вычисляемое поле, например ‘декан’ AS Position. Аналогично и в другие. И вытащи Position во внешний запрос

1 лайк

Спасибо

Подскажите еще пожалуйста как сделать такие выборки из этой же базы, используя подзапросы:

  1. Вывести полные имена преподавателей факультета “Computer
    Science”, которые не курируют группы кафедры “Software
    Development”

  2. Вывести названия аудиторий, с указанием их корпусов,
    в которых нет лекций в среду второй недели на третьей
    паре

Вот так и сделать )

Разобраться как подзапросы делать, и тогда должно быть не сложно.

https://www.dofactory.com/sql/subquery
https://www.sqlservertutorial.net/sql-server-basics/sql-server-subquery/
https://metanit.com/sql/mysql/4.8.php
https://www.sql.ru/docs/sql/u_sql/ch10.shtml

1 лайк