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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2012, 22:56   #1
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию SQL запрос в Access

Доброго времени суток.
В MS Access имеется две таблицы:

Таблица "Преподаватели":
Код:
PrepodNo - ключевое поле
PrSurName
PrName
Patronymic
Phone
Address
Cafedra
Таблица "РасписаниеЗанятий":
Код:
Day - ключевое поле
Lenta - ключевое поле
PrepodNo - ключевое поле
Aud
Discipline
Связь между таблицами по полю PrepodNo.

Задание
Цитата:
Используя таблицы Преподаватели, РасписаниеЗанятий, подсчитать для каждого преподавателя нагрузку по дням недели, т.е. количество рабочих академических часов. Считать, что одна лента составляет два академиче-ских часа. В запрос включить следующие поля: Фамилия, Имя, Отчество, ДеньНедели, ДневнаяФактическаяНагрузка. Вычисляемое поле: Дневная-ФактическаяНагрузка
Додумался вот до этого:
Код:
SELECT Преподаватели.prsurname, Преподаватели.prname, Преподаватели.Patronymic, РасписаниеЗанятий.Day, (select count(lenta) from РасписаниеЗанятий  where РасписаниеЗанятий.prepodno=преподаватели.prepodno) AS Нагрузка
FROM Преподаватели INNER JOIN РасписаниеЗанятий ON Преподаватели.PrepodNo = РасписаниеЗанятий.PrepodNo;
Но при таком запросе считает загрузку неделюную, т.е. суммирует все ленты, что у преподавателя есть (два академических часа пока не трогаем). Каким образом заставить считать количество лент для каждого преподователя в каждый день, когда у этого преподавателя есть ленты?
Все тривиальное просто
whatever вне форума Ответить с цитированием
Старый 28.02.2012, 23:52   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А так
Код:
SELECT Преподаватели.prsurname, Преподаватели.prname, Преподаватели.Patronymic, РасписаниеЗанятий.Day,COUNT(*) AS Нагрузка
  FROM Преподаватели
    INNER JOIN РасписаниеЗанятий ON Преподаватели.PrepodNo = РасписаниеЗанятий.PrepodNo
  GROUP BY Преподаватели.prsurname, Преподаватели.prname, Преподаватели.Patronymic, РасписаниеЗанятий.Day;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 29.02.2012, 17:11   #3
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Благадарю, результат получился именно такой, какой был нужен. Впрочем, логика запроса для меня осталась загадкой. Видимо основная хитрость в count(*) и GROUP BY РасписаниеЗанятий.Day ?

В любом случае спасибо, алоритм намотал на ус
Все тривиальное просто
whatever вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SQL Запрос в MS Access kedbl4 SQL, базы данных 7 14.05.2010 01:31
Запрос на SQL в Access Hant111 SQL, базы данных 4 01.04.2010 22:48
Запрос SQL MS Access! Artanis SQL, базы данных 6 12.11.2009 20:05
Запрос SQL из Access в Delphi Talemir БД в Delphi 5 26.08.2009 20:46