|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MSFT SQL Server - Как изменить периоды в таблице Т1 с учетом таблицы периодов Т2? |
|
MSFT SQL Server - Как изменить периоды в таблице Т1 с учетом таблицы периодов Т2?
|
Новый участник Сообщения: 45 |
Профиль | Отправить PM | Цитировать Добрый день уважаемые форумчане.
Прошу вас помочь в решении следующей задачи. T1 - Таблица общего стажа по сотрудникам Таб№ Начало Окончание 0001 01.01.2012 31.12.2012 0002 01.02.2012 25.12.2012 …… ………. ……….. 000N 01.01.2012 31.12.2012 T2 - Таблица больничных листов сотрудников из Т1 Таб№ Начало Окончание 0001 15.01.2012 25.01.2012 0001 10.05.2012 15.05.2012 0002 01.02.2012 15.02.2012 …… ………… ………….. 000N 03.10.2012 15.10.2012 Как из этих двух таблиц сделать третью, в котором стаж работы из Т1 разбит с учетом больничных листов из Т2. Т.е. должно получиться сдедующее: Таб№ Начало Окончание 0001 01.01.2012 14.01.2012 0001 15.01.2012 25.01.2012 0001 26.01.2012 09.05.2012 0001 10.05.2012 15.05.2012 0001 16.05.2012 31.12.2012 0002 01.02.2012 31.01.2012 0002 01.02.2012 15.02.2012 0002 16.02.2012 25.12.2012 ….. ……. …….. 000N 01.01.2012 02.10.2012 000N 03.10.2012 15.10.2012 000N 16.10.2012 31/12.2012 Платформа MS SQL 2000. Заранее благодарю за любую помощь в обсуждении. |
|
Отправлено: 13:48, 18-03-2013 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать elec, сделай доброе дело -- выдели одну из таблиц (например вторую) жирным шрифтом в совокупности таблиц. Вам, как автору видно разницу, мне, как человеку "с луны" ваще ее не видно! Где она?
И еще, приведи пожалуйста сценарии создания таблиц и, если получится, тестовый набор данных. |
------- Отправлено: 16:57, 18-03-2013 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 5624
|
Профиль | Отправить PM | Цитировать Цитата elec:
Я тоже ничего не понял. Оформляй списки тегами, выделяем что нужно и половина вопроса сама решится, вот увидишь. Задача, судя по всему, тривиальная, но вот вопрос поставлен жутко криво. |
|
------- Отправлено: 17:01, 18-03-2013 | #3 |
Новый участник Сообщения: 45
|
Профиль | Отправить PM | Цитировать set dateformat dmy
create table #t1 (id varchar(10), StDate datetime, EnDate datetime) insert #t1 ((id, StDate , EnDate) select '0001', '01.01.2012', '31.12.2012' insert #t1 ((id, StDate , EnDate) select '0002', '01.02.2012', '25.12.2012' insert #t1 ((id, StDate , EnDate) select '0003', '01.01.2012', '31.12.2012' insert #t1 ((id, StDate , EnDate) select '000N', '01.01.2012', '31.12.2012' create table #t2 (id varchar(10), StDate datetime, EnDate datetime) insert #t2 ((id, StDate , EnDate) select '0001', '15.01.2012', '25.01.2012' insert #t2 ((id, StDate , EnDate) select '0001', '10.05.2012', '15.05.2012' insert #t2 ((id, StDate , EnDate) select '0002', '01.02.2012', '15.02.2012' insert #t2 ((id, StDate , EnDate) select '000N', '03.10.2012', '15.10.2012' T1 - Таблица общего стажа по сотрудникам Таб№ Начало Окончание 0001 01.01.2012 31.12.2012 сотрудник 1 0002 01.02.2012 25.12.2012 сотрудник 2 ............................................................................................ 000N 01.01.2012 31.12.2012 сотрудник N ----------------------------------------------------------------------------------------------------------------------------- T2 - Таблица больничных листов сотрудников из Т1 Таб№ Начало Окончание 0001 15.01.2012 25.01.2012 сотрудник 1 болел с 15.01.2012 по 25.01.2012 0001 10.05.2012 15.05.2012 сотрудник 1 болел с 10.05.2012 по 15.05.2012 0002 01.02.2012 15.02.2012 и т.д. ........................................................................... 000N 03.10.2012 15.10.2012 -------------------------------------------------------------------------------------------------------------------- Т.е. должно получиться сдедующее: Таб№ Начало Окончание 0001 01.01.2012 14.01.2012 сотрудник 1 работал с 01.01.2012 по 14.01.2012 0001 15.01.2012 25.01.2012 сотрудник 1 болел с 15.01.2012 по 25.01.2012 0001 26.01.2012 09.05.2012 сотрудник 1 работал с 26.01.2012 по 09.05.2012 0001 10.05.2012 15.05.2012 сотрудник 1 болел с 10.05.2012 по 15.05.2012 0001 16.05.2012 31.12.2012 сотрудник 1 работал с 16.05.2012 по 31.12.2012 0002 01.02.2012 31.01.2012 и т.д. 0002 01.02.2012 15.02.2012 0002 16.02.2012 25.12.2012 .......................................................... 000N 01.01.2012 02.10.2012 сотрудник 1 работал с 01.01.2012 по 02.10.2012 000N 03.10.2012 15.10.2012 сотрудник 1 болел с 03.10.2012 по 15.10.2012 000N 16.10.2012 31.12.2012 сотрудник 1 работал 16.10.2012 по 31/12.2012 Вот такая задача. Сейчас понятно? |
Последний раз редактировалось elec, 18-03-2013 в 18:47. Отправлено: 18:38, 18-03-2013 | #4 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать elec, да откуда берется столько значений?!
Из приведенного примера. Это что за метаморфоза? Даты вообще плодятся в страшном кол-ве. От них в глазах рябит. Попросил же, выделить жирным тегом [b] [/b] Обратить внимание на ключевое слово UNION и порядок сортировки ORDER BY. |
|
------- Отправлено: 20:36, 18-03-2013 | #5 |
Новый участник Сообщения: 45
|
Профиль | Отправить PM | Цитировать Добрый день. Я может быть что-то некорректно написал.
В конторе ZZZ в 2012 году работали N кол-во человек (сотрудников). В таблице t1 записаны данные: сотрудник - дата поступления и дата увольнения. Поэтому в таблице N количество записей. Таб№ Начало Окончание 0001 01.01.2012 31.12.2012 0002 01.02.2012 25.12.2012 ............................................................................................ 000N 01.01.2012 31.12.2012 Сотрудник 0001 в конторе ZZZ проработал с 01.01.2012 по 31.12.2012, сотрудник 0002 с 01.02.2012 по 25.12.2012 и т.д. В 2012 году некоторые из них прихворали, может быть и не одному разу. В таблице t2 есть об этих случаях соответствующие записи: 0001 15.01.2012 25.01.2012 0001 10.05.2012 15.05.2012 0002 01.02.2012 15.02.2012 ........................................................................... 000N 03.10.2012 15.10.2012 Т.е. сотрудник 0001 во время работы в конторе ZZZ хворал 2 раза с 15.01.2012 по 25.01.2012 и с 10.05.2012 по 15.05.2012. А сотрудник 0002 с 01.02.2012 по 15.02.2012, и т.д. Может быть кто-то вообще не болел. Необходимо получить общую таблицу, в которой внутрь первой таблицы ставить периоды из второй таблицы. Заранее неизвестно сколько будет у каждого сотрудника записей. Вот такая задача. |
Отправлено: 21:24, 18-03-2013 | #6 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Зависание ноутбука на 1 минуту в течение разных периодов времени | Smakarov | Непонятные проблемы с Железом | 4 | 18-12-2012 06:44 | |
Интернет - При нажатии ИЗМЕНИТЬ в контекстном меню открывается блокнот. Как изменить? | Twix1124 | Microsoft Windows 8 и 8.1 | 5 | 23-04-2012 18:36 | |
MSFT SQL Server - создание таблицы точнее проблемма с созданием таблицы | GAROD | Программирование и базы данных | 4 | 02-12-2010 00:58 | |
FreeBSD - помогите с учетом трафика | Vudluskr | Общий по FreeBSD | 1 | 28-01-2009 21:53 | |
голосование с учетом пожеланий | oIo_DeN_oIo | Вебмастеру | 4 | 07-07-2008 18:26 |
|