Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MSFT SQL Server - Как изменить периоды в таблице Т1 с учетом таблицы периодов Т2?

Ответить
Настройки темы
MSFT SQL Server - Как изменить периоды в таблице Т1 с учетом таблицы периодов Т2?

Новый участник


Сообщения: 45
Благодарности: 0

Профиль | Отправить 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

 

Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


elec, сделай доброе дело -- выдели одну из таблиц (например вторую) жирным шрифтом в совокупности таблиц. Вам, как автору видно разницу, мне, как человеку "с луны" ваще ее не видно! Где она?
И еще, приведи пожалуйста сценарии создания таблиц и, если получится, тестовый набор данных.

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 16:57, 18-03-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Delirium

Ветеран


Сообщения: 5624
Благодарности: 936

Профиль | Отправить PM | Цитировать


Цитата elec:
Платформа MS SQL 2000 »
Серьезно? Оно еще живо?


Я тоже ничего не понял. Оформляй списки тегами, выделяем что нужно и половина вопроса сама решится, вот увидишь. Задача, судя по всему, тривиальная, но вот вопрос поставлен жутко криво.

-------

Пройденные курсы:
[Microsoft №10174 Sharepoint], [SharePoint]
Мои проекты:[CheckAdmins], [NetSend7], [System Uptime], [Remote RAdmin LogViewer],[Netdom GDI], [Holidays - напоминалка о днях рождения]

А я офис-гуру :)


Отправлено: 17:01, 18-03-2013 | #3


Новый участник


Сообщения: 45
Благодарности: 0

Профиль | Отправить 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


Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


elec, да откуда берется столько значений?!
Из приведенного примера.
Входные данные:

001 -- 3 шт.
002 -- 2 шт.
003 -- 1 шт.
00N -- 2 шт.

А получаем

1 - 5
2 - 3
N - 3 !

Это что за метаморфоза?
Даты вообще плодятся в страшном кол-ве. От них в глазах рябит. Попросил же, выделить жирным тегом [b] [/b]
Код для 2008R2 сервера

PHP код: Выделить весь код

DROP TABLE [oszone].[dbo].[t1];
set dateformat dmy;
create table t1 (id varchar(10), StDate datetimeEnDate datetime);
INSERT INTO T1 
VALUES 
('0001''01.01.2012''31.12.2012'),
(
'0002''01.02.2012''25.12.2012'),
(
'0003''01.01.2012''31.12.2012'),
(
'000N''01.01.2012''31.12.2012');


DROP TABLE [oszone].[dbo].[t2];
set dateformat dmy;
create table T2 (id varchar(10), StDate datetimeEnDate datetime);
INSERT INTO T2
VALUES 
('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');


SELECT [id]
      ,[
StDate]
      ,[
EnDate]
  
FROM [oszone].[dbo].[t1]
;  
SELECT [id]
      ,[
StDate]
      ,[
EnDate]
  
FROM [oszone].[dbo].[t2]
;  
SELECT 
       
[oszone].[dbo].[t1].[id]
      ,[
oszone].[dbo].[t1].[StDate]
      ,[
oszone].[dbo].[t1].[EnDate]
  
FROM [oszone].[dbo].[t1]
UNION
SELECT      
      
[oszone].[dbo].[t2].[id]
      ,[
oszone].[dbo].[t2].[StDate]
      ,[
oszone].[dbo].[t2].[EnDate]
  
FROM [oszone].[dbo].[t2]
ORDER BY 
    
[oszone].[dbo].[t1].[id],
    [
oszone].[dbo].[t1].[StDate]



Обратить внимание на ключевое слово UNION и порядок сортировки ORDER BY.

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 20:36, 18-03-2013 | #5


Новый участник


Сообщения: 45
Благодарности: 0

Профиль | Отправить 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



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MSFT SQL Server - Как изменить периоды в таблице Т1 с учетом таблицы периодов Т2?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Зависание ноутбука на 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




 
Переход