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

так, и какие у вас идеи? :)
...
Рейтинг: 0 / 0
Составить запрос
    #39931936
Anastasia99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
felix_ff, понятно, как объединить таблицы, но как создать условие для определения наличия занятия в конкретной аудитории в конкретный день недели идей нет
...
Рейтинг: 0 / 0
Составить запрос
    #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
Составить запрос
    #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
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Составить запрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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