Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос из одной таблицы по двум условиям / 17 сообщений из 17, страница 1 из 1
08.05.2020, 11:01
    #39955203
iBibigon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос из одной таблицы по двум условиям
Приветствую, и прошу помочь со следующей проблемкой.
Есть БД некой конторы. Часть этой БД изображена на схеме (в аттаче).
Как видно из схемы этот участок, по сути, является телефонной книгой, но с одним свойством - тип телефонного номера (допустим, тип 1 - стационарный номер принадлежащий конторе, тип 2 - мобильный номер принадлежащий контроле, тип 3 - личный стационарный номер, тип 4 - личный мобильный номер и т.п.)

Вопрос: как одним запросом достать из БД ФИО, телефонный номер тип 1, телефонный номер тип 2.

ЗЫ: возможно рациональнее как-то схемку допилить/изменить?
...
Рейтинг: 0 / 0
08.05.2020, 11:52
    #39955220
Запрос из одной таблицы по двум условиям
iBibigon
как одним запросом достать из БД ФИО, телефонный номер тип 1, телефонный номер тип 2.

Вы бы, для начала, показали, как пробовали и что не получилось.
Конкретно для этой задачи - запрос на трех таблицах, группировка по PersonID, First(Ф & " " & И & " " + О), Max(IF(Тип=1, Номер, Null), Max(IF(Тип=2, Номер, Null)
...
Рейтинг: 0 / 0
08.05.2020, 12:18
    #39955234
iBibigon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос из одной таблицы по двум условиям
Спасибо за ответ.
Пробовал многое - всего не перечислить.
Но мысли крутятся в основном в следующем направлении. В запрос на выборку типа такого:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT Person_Surname+Left(person_name,1)+"." AS ФИО, 
           PhoneNumber_Number
FROM PhoneNumbers
      INNER JOIN (Persons 
             INNER JOIN Phone2Persons
             ON Persons.Person_ID = Phone2Persons.Phone2Person_PersonID)
      ON PhoneNumbers.PhoneNumber_ID =  Phone2Persons.Phone2Person_PhoneNumberID
WHERE PhoneNumbers.[phonenumber_phonenumbertypeid]=1;



добавить подзапрос:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT Person_Surname+Left(person_name,1)+"." AS ФИО, 
           PhoneNumber_Number,
          (SELECT PhoneNumber_Number 
          FROM Phone2Persons
              INNER JOIN PhoneNumbers 
              ON Phone2Persons.Phone2Person_PhoneNumberID = PhoneNumbers.PhoneNumber_ID
          WHERE Phone2Person_PersonID = PersonID AND PhoneNumber.PhoneNumberTypeID = 2)
FROM PhoneNumbers
      INNER JOIN (Persons
             INNER JOIN Phone2Persons
             ON Persons.Person_ID = Phone2Persons.Phone2Person_PersonID)
      ON PhoneNumbers.PhoneNumber_ID =  Phone2Persons.Phone2Person_PhoneNumberID
WHERE PhoneNumbers.[phonenumber_phonenumbertypeid]=1;



Но что-то как-то не выходит каменный цветок...
...
Рейтинг: 0 / 0
08.05.2020, 12:55
    #39955249
alecko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос из одной таблицы по двум условиям
iBibigon, телефонный номер может принадлежать нескольким персонам?
...
Рейтинг: 0 / 0
08.05.2020, 12:59
    #39955254
iBibigon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос из одной таблицы по двум условиям
alecko, нет - телефонный номер принадлежит только одному человеку.
...
Рейтинг: 0 / 0
08.05.2020, 14:56
    #39955331
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос из одной таблицы по двум условиям
iBibigon
alecko, нет - телефонный номер принадлежит только одному человеку.
правда их типов 4
...
Рейтинг: 0 / 0
09.05.2020, 00:45
    #39955499
alecko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос из одной таблицы по двум условиям
iBibigon
телефонный номер принадлежит только одному человеку.

зато у одной персоны может быть несколько номеров, я бы взял шире-каналов связи (номер, мэйл, вац-ап).
думаю понятно, что таблицу phone2person нужно выкинуть, в таблицу Phonenumbers ввести внешний ключ с таблицей Persons с отношением 1М. Поскольку выкинули посредника запросы не будут сложными (мне кажется).
...
Рейтинг: 0 / 0
10.05.2020, 11:14
    #39955650
Запрос из одной таблицы по двум условиям
[quot alecko#22129735]
iBibigon
телефонный номер принадлежит только одному человеку.
У одной персоны может быть несколько номеров, в т.ч. и офисные. С другой стороны у того же офисного номера куча пользователей.
ИМХО, таблица phone2person нужна.
ИМХО2, вы оба не правы.
...
Рейтинг: 0 / 0
10.05.2020, 12:41
    #39955658
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос из одной таблицы по двум условиям
iBibigon


Вопрос: как одним запросом достать из БД ФИО, телефонный номер тип 1, телефонный номер тип 2.

ЗЫ: возможно рациональнее как-то схемку допилить/изменить?
По моему,предложенный пример отвечает на вопрос ТС
(если создать перекрестный запрос,то он на 100% будет тем,что хочет видеть ТС)
...
Рейтинг: 0 / 0
12.05.2020, 10:14
    #39956129
iBibigon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос из одной таблицы по двум условиям
alecko,

Спасибо за Ваш ответ.
Телефон может быть привязан не к человеку, а к месту где расположен. Например, телефон установлен в лаборатории, к конкретному человеку он не привязан. Или в переговорной комнате - то же самое.
...
Рейтинг: 0 / 0
12.05.2020, 10:16
    #39956130
iBibigon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос из одной таблицы по двум условиям
sdku,

Спасибо, попробую с перекрёстными запросами.
...
Рейтинг: 0 / 0
12.05.2020, 11:03
    #39956150
alecko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос из одной таблицы по двум условиям
iBibigon,
номер телефона в данном случае - это не ключ, не индекс. в таблице может быть несколько каналов с одинаковым номером, при этом сами каналы связи будут с разными персонами, что важно - это код(id) канала связи, а не то что записано в текстовом поле.
...
Рейтинг: 0 / 0
12.05.2020, 14:40
    #39956313
ldfanate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос из одной таблицы по двум условиям
iBibigon
alecko,

Спасибо за Ваш ответ.
Телефон может быть привязан не к человеку, а к месту где расположен. Например, телефон установлен в лаборатории, к конкретному человеку он не привязан. Или в переговорной комнате - то же самое.


Он вообщето к рабочему месту штатной единицы (единице штатного расписания компании) привязан.
Либо к общему/сменному рабочему месту, типа той же совещательной студии, но там в любом случае будет ктото ответственный за этот телефон назначен (например завхоз, который отвечает за студии), т.к. связисты просто так обезличенные телефонные номера не выдают.
Т.е. структура БД не шибко удобная для стационарных номеров. Сотрудник перевёлся на другую должность (на другую штатную единицу сел), с ним поехала связь работник-телефон с его прежнего места работы, а там на столе другой телефон привинчен.
...
Рейтинг: 0 / 0
14.05.2020, 08:01
    #39957228
Swa111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос из одной таблицы по двум условиям
ldfanateСотрудник перевёлся на другую должность (на другую штатную единицу сел), с ним поехала связь работник-телефон с его прежнего места работы, а там на столе другой телефон привинчен.

Это решается добавлением в таблицу Phone2Persons двух полей dBegin и dEnd, c периодом действия. Это позволит строить не только текущую картину распределения номеров, но и хранить прошлую историю и планы на будущее
...
Рейтинг: 0 / 0
14.05.2020, 08:27
    #39957235
ldfanate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос из одной таблицы по двум условиям
Swa111, а толку? Всёравно связь работник-телефон останется, а значит будет путешествовать вслед за работником при его кадровых перемещениях.
Если БД именно телефонный справочник компании, то там чтото типа оргструктуры просится, с иерархией подразделение-штатная должность-рабочее место(места)-работник и -рабочее место-стационарный телефон, -штатная должность-корпоративный мобильный, -работник-личные телефоны. Тогда при движении персонала стационарные телефоны по прежнему останутся привязаны к рабочему месту, корпоративные мобильные - к штатной должности, как это в реальной жизни и происходит.
...
Рейтинг: 0 / 0
14.05.2020, 21:52
    #39957757
Swa111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос из одной таблицы по двум условиям
ldfanate,

Все зависит от специфики работы предприятия, например у нас имеется собственная телефонная служба, и при переходе сотрудники чаще всего переезжают вместе с телефонами, даже в случае перевода между подразделениями. Плюс ведение и поддержание в актуальном состоянии рабочих мест привязанных к штатке это все дополнительные трудозатраты. Например нам было проще автоматизировать подачу заявок на изменение контактной информации, тогда сами работники следят за актуальностью.
...
Рейтинг: 0 / 0
26.05.2020, 19:56
    #39962469
iBibigon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос из одной таблицы по двум условиям
ldfanate
iBibigon
alecko,

Спасибо за Ваш ответ.
Телефон может быть привязан не к человеку, а к месту где расположен. Например, телефон установлен в лаборатории, к конкретному человеку он не привязан. Или в переговорной комнате - то же самое.


Он вообщето к рабочему месту штатной единицы (единице штатного расписания компании) привязан.
Либо к общему/сменному рабочему месту, типа той же совещательной студии, но там в любом случае будет ктото ответственный за этот телефон назначен (например завхоз, который отвечает за студии), т.к. связисты просто так обезличенные телефонные номера не выдают.
Т.е. структура БД не шибко удобная для стационарных номеров. Сотрудник перевёлся на другую должность (на другую штатную единицу сел), с ним поехала связь работник-телефон с его прежнего места работы, а там на столе другой телефон привинчен.


Сотрудник перевёлся на другую должность - номер поехал за ним (физически берёт свой телефон к которому привязан номер и топает на новое рабочее место). В данном случае поменяется связь - человек - должность.
Но номер лаборатории всегда останется за лабораторией. И фиолетово кто там за него отвечает. Ну то есть, мне - фиолетово. От "связистов" пока запросов не поступало.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос из одной таблицы по двум условиям / 17 сообщений из 17, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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