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

Откуда:
Сообщений: 11
Вобщем.Имеются вот такие таблицы (картинка вложена)

Я хочу чтобы в приложении visual studio бригаду,которая поедет на вызов можно было выбирать из представления(или из выпадающего списка)
Но,
1)нужно чтобы эта бригада дежурила в этот день, т.е. systemdatetime() = Расписание.Дата
2)нужно чтобы текущее время входило в интервал времени смены, т.е. с 9-00 до 21-00(дневная), с 21-00 до 9-00(ночная).
3)нужно учитывать только те бригады,которые еще не вернулись с вызова, т.е. Вызовы.Время_возвращения = null
4) также нужно чтобы в представлении появлялись не все бригады,а те, кторые были на вызовах меньше всего раз за сегодняшний день

Вот есть набросок


SELECT t3.ИН_бригады
FROM
(SELECT MIN(КоличествоВызовов) AS Минимум
FROM
(SELECT COUNT(Вызовы.Бригада) AS КоличествоВызовов,ИН_бригады
FROM Вызовы,Расписание
WHERE Расписание.ИН_бригады = Вызовы.Бригада
AND
CAST(Расписание.Дата AS DATE) = CAST(SYSDATETIME() AS DATE)
AND
CAST(Вызовы.Дата_время_вызова AS DATE) = CAST(SYSDATETIME() AS DATE)
GROUP BY Расписание.ИН_бригады--Вызовы.Бригада
) AS t1
) AS t2,
(SELECT COUNT(Вызовы.Бригада) AS КоличествоВызовов,ИН_бригады
FROM Вызовы,Расписание
WHERE Расписание.ИН_бригады = Вызовы.Бригада
AND
CAST(Расписание.Дата AS DATE) = CAST(SYSDATETIME() AS DATE)
AND
CAST(Вызовы.Дата_время_вызова AS DATE) = CAST(SYSDATETIME() AS DATE)
GROUP BY Расписание.ИН_бригады--Вызовы.Бригада
) AS t3
WHERE КоличествоВызовов = Минимум;

Но здесь находит только бригады с минимальным количеством выездов. И не учитываются п. 2 и 3. Таже этот запрос не ищет бригады, у которых еще вообще не было вызовов, хотя они дежурят в этот день(
Помогите, пожалуйста, чем сможете.

К сообщению приложен файл. Размер - 53Kb
7 июн 13, 13:56    [14406198]     Ответить | Цитировать Сообщить модератору
 Re: Создание представления  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Это программерский форум
bbt
SELECT t3.ИН_бригады
FROM
 (SELECT MIN(КоличествоВызовов) AS Минимум
  FROM
    (SELECT COUNT(Вызовы.Бригада) AS КоличествоВызовов,ИН_бригады
     FROM Вызовы,Расписание
     WHERE  Расписание.ИН_бригады = Вызовы.Бригада
             AND 
            CAST(Расписание.Дата AS DATE) = CAST(SYSDATETIME() AS DATE)
             AND
            CAST(Вызовы.Дата_время_вызова AS DATE) = CAST(SYSDATETIME() AS DATE)
     GROUP BY Расписание.ИН_бригады--Вызовы.Бригада
    ) AS t1
  ) AS t2,
  (SELECT COUNT(Вызовы.Бригада) AS КоличествоВызовов,ИН_бригады
     FROM Вызовы,Расписание
     WHERE  Расписание.ИН_бригады = Вызовы.Бригада
             AND 
            CAST(Расписание.Дата AS DATE) = CAST(SYSDATETIME() AS DATE)
             AND
            CAST(Вызовы.Дата_время_вызова AS DATE) = CAST(SYSDATETIME() AS DATE)
     GROUP BY Расписание.ИН_бригады--Вызовы.Бригада
    ) AS t3
  WHERE КоличествоВызовов = Минимум;
Береги наши глаза, пожалуйста.
7 июн 13, 16:14    [14407303]     Ответить | Цитировать Сообщить модератору
 Re: Создание представления  [new]
bbt
Member

Откуда:
Сообщений: 11
Mnior,
простите)просто не нашел где здесь теги)
7 июн 13, 16:20    [14407354]     Ответить | Цитировать Сообщить модератору
 Re: Создание представления  [new]
Glory
Member

Откуда:
Сообщений: 104751
bbt
Но здесь находит только бригады с минимальным количеством выездов. И не учитываются п. 2 и 3. Таже этот запрос не ищет бригады, у которых еще вообще не было вызовов, хотя они дежурят в этот день(

Конечно. Вы же никак не задействовали в запросе собственно таблицу Бригады

Ваш запрос должен выглядеть как то так

select *
from Бригады a
where exists( чтобы эта бригада дежурила в этот день, т.е. systemdatetime() = Расписание.Дата)
and exists(чтобы текущее время входило в интервал времени смены, т.е. с 9-00 до 21-00(дневная), с 21-00 до 9-00(ночная). )
and exists (учитывать только те бригады,которые еще не вернулись с вызова, т.е. Вызовы.Время_возвращения = null)
7 июн 13, 16:25    [14407393]     Ответить | Цитировать Сообщить модератору
 Re: Создание представления  [new]
bbt
Member

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

а для чего? в таблице Расписание есть номера бригад
7 июн 13, 16:38    [14407484]     Ответить | Цитировать Сообщить модератору
 Re: Создание представления  [new]
Glory
Member

Откуда:
Сообщений: 104751
bbt
а для чего? в таблице Расписание есть номера бригад

Ага, а в вызовах бригады, у которых не было вызовов ?
7 июн 13, 16:41    [14407498]     Ответить | Цитировать Сообщить модератору
 Re: Создание представления  [new]
bbt
Member

Откуда:
Сообщений: 11
Glory,
чето я вас не понимаю) объясните пожалуйста для чего там нужна таблица Бригады?
Запросу же из таблицы Бригады ничего ,кроме номеров бригад, не нужно, а в таблице Расписание уже есть эти номера.
Далее нам нужны дата и смена ,в которую дижурят бригады.Еще информация о вызовах,из таблицы Вызовы.
Может я что-то не так понимаю,объясните пожалуйста подробнее)
7 июн 13, 17:16    [14407727]     Ответить | Цитировать Сообщить модератору
 Re: Создание представления  [new]
Glory
Member

Откуда:
Сообщений: 104751
bbt
чето я вас не понимаю) объясните пожалуйста для чего там нужна таблица Бригады?

Мне лично ничего не нужно. Нужно вам

bbt
Запросу же из таблицы Бригады ничего ,кроме номеров бригад, не нужно, а в таблице Расписание уже есть эти номера.
Далее нам нужны дата и смена ,в которую дижурят бригады.Еще информация о вызовах,из таблицы Вызовы.

Еще раз. Как ваши запросы, соединяющиее Расписание и Вызовы, выберут Бригады, к которых есть Расписание, но нет Вызовов ?
7 июн 13, 17:18    [14407741]     Ответить | Цитировать Сообщить модератору
 Re: Создание представления  [new]
bbt
Member

Откуда:
Сообщений: 11
Glory, я знаю что это вам не нужно)
Всеравно не понимаю как будут выбираться бригады,у которых есть расписание,но нет вызовов. Подскажите пожалуйста что добавить кроме Бригады(
7 июн 13, 20:14    [14408198]     Ответить | Цитировать Сообщить модератору
 Re: Создание представления  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
bbt
3)нужно учитывать только те бригады,которые еще не вернулись с вызова, т.е. Вызовы.Время_возвращения = null
Как только все вернутся, то никого отправить на вызов уже будет невозможно, так что ли?
7 июн 13, 22:41    [14408623]     Ответить | Цитировать Сообщить модератору
 Re: Создание представления  [new]
bbt
Member

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

Как это? Как вернутся,нужно будет посмотреть кто сколько раз выезжал и отправить на новый вызов ту бригаду (или одну из них),у который меньше всего вызовов. Но кстати можно сделать не по количеству вызовов, а по времени, которое провела бригада без выезда. Т.е. кто дольше всего не был на выезде-тот и поедет
8 июн 13, 04:34    [14409170]     Ответить | Цитировать Сообщить модератору
 Re: Создание представления  [new]
bbt
Member

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

только вот обойтись ли тогда имеющейся информацией? или лучше создать таблицу с номерами бригад и временем их последнего выезда, в которую будут вноситься значения через триггер при заполнении таблицы Вызовы
8 июн 13, 04:39    [14409174]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить