Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Запрос к нескольким таблицам / 13 сообщений из 13, страница 1 из 1
24.08.2004, 11:34
    #32662607
Cyr
Cyr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос к нескольким таблицам
есть две таблицы:
pr1 - приказы о приёме на работу
pr2 - кадровые перемещения

pr1 имеет поля:
sotr - код сотрудника
dp1 - дата приёма
pod1 - код подразделения

pr2 имеет поля:
sotr - код сотрудника
dp2 - дата перевода
pod2 - код подразделения

Требуется вывести сотрудников с текущими подразделениями.
Нужно брать подразделение из той таблицы,
у которой дата dp1 или dp2 свежее для данного сотрудника.
...
Рейтинг: 0 / 0
24.08.2004, 12:07
    #32662711
MoonRabbit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос к нескольким таблицам
Ну, а на каком языке-то?

В любом случае алгоритм наверное такой:

Если существует хоть одна запись в таблице pr2
тогда выбрать запись с максимальной датой для сотрудника из таблицы pr2
иначе выбрать запись для сотрудника из таблицы pr1
...
Рейтинг: 0 / 0
24.08.2004, 15:32
    #32663283
Cyr
Cyr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос к нескольким таблицам
Нужно сделать SQL-запрос.
Я так понимаю с функцией max()
Т.е. выбирается запись pod1 или pod2 из двух таблиц со свежайшей датой dp1 или dp2
Т.е. нужно объединить pod1 с pod2 в одно поле (pod) и dp1 с dp2 в другое (dp).
Сгруппировать их по сотрудникам и выбрать.
Типа так:
SELECT sotr, pod, max(dp)
FROM pr
GROUP BY sotr

Вопрос: как объединить эти поля в запросе?
...
Рейтинг: 0 / 0
24.08.2004, 15:49
    #32663326
MoonRabbit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос к нескольким таблицам
Нет, не так...
Наверное, так:
Select
Sotr,
Pod = если есть в pr2 хоть одна запись тогда код подразделения из pr2 для максимальной даты иначе код подразделения из pr1
From pr1

Сорри, точного синтаксиса не знаю :)
И вопрос надо было куда-нидь в MSSQL запостить, там спецов больше обитает по T-SQL
...
Рейтинг: 0 / 0
24.08.2004, 15:55
    #32663339
Cyr
Cyr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос к нескольким таблицам
Нет, нужно обязательно максимальную дату из двух таблиц.
Потому, что человек может несколько раз приниматься и увольняться и
несколко раз переводится из подразделения в подразделение.
Так что, полюбому надо объёдинять эти две таблицы, группировать по сотруднику и выбирать подразделение по максимальной дате.
...
Рейтинг: 0 / 0
24.08.2004, 16:18
    #32663392
MoonRabbit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос к нескольким таблицам
Тогда есть вариант сделать полный union таблицам, и уже из объединенного массива
делать выборку максимальных дат для сотрудника, с группировкой по сотруднику.
...
Рейтинг: 0 / 0
24.08.2004, 16:37
    #32663431
Cyr
Cyr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос к нескольким таблицам
Именно так! осталось только с синтаксисом разобраться...
...
Рейтинг: 0 / 0
25.08.2004, 14:50
    #32664930
Cyr
Cyr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос к нескольким таблицам
UNION то получился...

SELECT sotr, pod1, dp1
FROM pr1
UNION
SELECT sotr, pod2, dp2
FROM pr2

А как вот теперь из этого объединения
выбирать по максимальной дате?
...
Рейтинг: 0 / 0
25.08.2004, 17:10
    #32665361
MoonRabbit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос к нескольким таблицам
А вы можете данный запрос выгрузить во временную таблицу,
типа into #a,
И затем выбрать максимальную дату с группировкой по сотруднику, типа:
Select Sotr, max(DP)
From #a
Group by Sotr
...
Рейтинг: 0 / 0
25.08.2004, 17:53
    #32665484
MoonRabbit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос к нескольким таблицам
Ну, я не очень силен в T-SQL-е, так что смотрите BOL,
я всего-лишь предложил алгоритм :-)
...
Рейтинг: 0 / 0
26.08.2004, 14:09
    #32666752
Cyr
Cyr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос к нескольким таблицам
MoonRabbitА вы можете данный запрос выгрузить во временную таблицу,
типа into #a,
И затем выбрать максимальную дату с группировкой по сотруднику, типа:
Select Sotr, max(DP)
From #a
Group by Sotr

В этом случае мы получим только имя сотрудника и максимальную дату.
А нам то нужно подразделение на эту дату.
...
Рейтинг: 0 / 0
26.08.2004, 14:26
    #32666833
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос к нескольким таблицам
Cyr MoonRabbitА вы можете данный запрос выгрузить во временную таблицу,
типа into #a,
И затем выбрать максимальную дату с группировкой по сотруднику, типа:
Select Sotr, max(DP)
From #a
Group by Sotr

В этом случае мы получим только имя сотрудника и максимальную дату.
А нам то нужно подразделение на эту дату.
Ну и джоините слева ваши таблицы подразделений по Sotr и dp. Непонятным остается момент, из какой таблицы брать подразделение, если записи окажуться в двух таблицах.
З.Ы. Если вопрос по MSSQL, задавали бы в соответствующем форуме - там быстрее ответят.
...
Рейтинг: 0 / 0
26.08.2004, 15:40
    #32667184
Cyr
Cyr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос к нескольким таблицам
Вопрос по стандартному SQL.
А реализовано всё будет на delphi
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Запрос к нескольким таблицам / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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