Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Составить запрос / 5 сообщений из 5, страница 1 из 1
27.02.2020, 14:26
    #39931715
Anastasia99
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить запрос
Есть 4 таблицы: Занятие(идентификатор занятия|номер аудитории|номер пары|идентификатор дня недели), Корпус(название корпуса|адрес корпуса), Аудитория(номер аудитории|кол-во мест в аудитории|название корпуса|идентификатор типа аудитории), День недели(идентификатор дня недели|название дня недели).
Нужно составить запрос: для каждой аудитории заданного корпуса и каждого дня недели вывести сведения о наличии занятий(если занятий нет, то полю столбца 'Наличие занятие' присваивается '-', если есть - '+').
Использовать соединение таблиц Занятие и Аудитория.
...
Рейтинг: 0 / 0
27.02.2020, 15:34
    #39931768
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить запрос
Anastasia99,

так, и какие у вас идеи? :)
...
Рейтинг: 0 / 0
27.02.2020, 18:54
    #39931936
Anastasia99
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить запрос
felix_ff, понятно, как объединить таблицы, но как создать условие для определения наличия занятия в конкретной аудитории в конкретный день недели идей нет
...
Рейтинг: 0 / 0
27.02.2020, 19:17
    #39931947
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить запрос
Anastasia99, Т.е. для каждого дня недели (D) каждой аудитории (R) (D inner join R on 1 = 1 или D cross join R) проверить факт наличия (в селекте case exists(L where L.D = D and L.R = R) или jeft join с проверкой на null/ not null в селект) занятий (L) при условии D.B = Корпус
...
Рейтинг: 0 / 0
27.02.2020, 22:15
    #39932003
londinium
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить запрос
Не уверен, но как-то так

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
USE master
GO

DECLARE @InBuildingID TINYINT;--заданного корпуса 
SELECT @InBuildingID=1;


--День недели(идентификатор дня недели|название дня недели)
WITH CALENDER AS
(
  SELECT 1 AS DAY_ID,'MONDAY'AS DAYYNAME
   UNION ALL
  SELECT 2,'TUESDAY'
   UNION ALL
  SELECT 3,'WEDNESDAY'
   UNION ALL
  SELECT 4,'THURSDAY'
   UNION ALL
  SELECT 5,'FRIDAY'
   UNION ALL
  SELECT 6,'SATURDAY'
   UNION ALL
  SELECT 7,'SUNDAY'      
),
--Корпус(название корпуса|адрес корпуса), 
BUILDING AS
(
  SELECT 1 AS BUILDING_ID,'BUILDING 1'AS BUILDINGDESCRIPTION
   UNION ALL
  SELECT 2,'BUILDING 2'
   UNION ALL
  SELECT 3,'BUILDING 3'  
),
--Аудитория(номер аудитории|кол-во мест в аудитории|название корпуса|идентификатор типа аудитории)
ROOM AS
(
  SELECT 1 AS ROOM_NUMBER,5 AS SEATSCOUNT,1 AS BUILDING_ID,'A'AS ROOMTYPE
   UNION ALL
  SELECT 2 AS ROOM_NUMBER,10 AS SEATSCOUNT,1 AS BUILDING_ID,'B'AS ROOMTYPE
   UNION ALL
  SELECT 3 AS ROOM_NUMBER,50 AS SEATSCOUNT,2 AS BUILDING_ID,'ZZ'AS ROOMTYPE  
),
--Занятие(идентификатор занятия|номер аудитории|номер пары|идентификатор дня недели)
LESSON AS
(
  SELECT 1 AS LESSON_ID,1 AS ROOM_NUMBER,1 AS PARANUMBER,1 AS DAY_ID
   UNION ALL
  SELECT 2 AS LESSON_ID,2 AS ROOM_NUMBER,2 AS PARANUMBER,2 AS DAY_ID
   UNION ALL
  SELECT 3 AS LESSON_ID,3 AS ROOM_NUMBER,5 AS PARANUMBER,7 AS DAY_ID  
)

/*
Нужно составить запрос: для каждой аудитории заданного корпуса 
и каждого дня недели вывести сведения о наличии 
занятий(если занятий нет, то полю столбца 'Наличие занятие' присваивается '-', если есть - '+').
Использовать соединение таблиц Занятие и Аудитория. 
*/
SELECT R.ROOM_NUMBER,R.ROOMTYPE,R.SEATSCOUNT,C.DAYYNAME,
CASE
 WHEN L.LESSON_ID IS NULL THEN '-'
 ELSE '+'
END AS IS_LESSON_PRESENT 
FROM ROOM AS R
CROSS JOIN CALENDER AS C
LEFT JOIN LESSON AS L ON R.ROOM_NUMBER=L.ROOM_NUMBER AND L.DAY_ID=C.DAY_ID
WHERE R.BUILDING_ID=@InBuildingID;
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Составить запрос / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]