powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / SSIS: как сделать такой производный столбец?
11 сообщений из 11, страница 1 из 1
SSIS: как сделать такой производный столбец?
    #39493044
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть входная таблица (неудобная, но какая есть):
id человека дата дата2 должность1 02.01.2011 05.05.2011 помощник1 02.03.2011 05.05.2011 старший программист
1 - это номер человека, таблица описывает то, как он гулял.
02.01.2011 он устроился на работу
02.03.2011 он перешёл в другую должность
02.05.2011 он уволился.

Для всех строк с одинаковым ID дата2 будет одинаковой.

В общем, я хочу это импортировать в свою БД и для этого хотел бы сделать произвольный столбец, который по-человечески бы описывал дату окончания.
id человека дата дата2 должность1 02.01.2011 01.03.2011 помощник1 02.03.2011 05.05.2011 старший программист
...
Рейтинг: 0 / 0
SSIS: как сделать такой производный столбец?
    #39493052
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles Weyland,

в чем сложность найти следующую запись по паре {ID, дата} и сделать "-1"?

https://msdn.microsoft.com/ru-ru/library/hh213125(v=sql.120).aspx
...
Рейтинг: 0 / 0
SSIS: как сделать такой производный столбец?
    #39493077
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в том, что у меня SQL server 2008 R2,
плюс, хотелось бы знать, как это сделать в SSIS - т.е. до того, как данные попадут в базу.
...
Рейтинг: 0 / 0
SSIS: как сделать такой производный столбец?
    #39493080
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему так не сделать?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
--drop table #t

create table #t 
(
[id человека]	int,
дата	date,
дата2	date,
должность varchar(50)
)
insert into #t values (1,	'02.01.2011',	'05.05.2011',	'помощник')
insert into #t values (1,	'02.03.2011',	'05.05.2011',	'старший программист')

SELECT	F.[id человека],
				F.дата AS ST,
				isnull(S.дата, '20150101') AS ED,
				F.должность
FROM
	(
	SELECT *, ROW_NUMBER() OVER (PARTITION BY [id человека] ORDER BY дата) AS RN
	FROM #t
	) AS F
LEFT JOIN
	(
	SELECT *, ROW_NUMBER() OVER (PARTITION BY [id человека] ORDER BY дата) AS RN
	FROM #t
	) AS S
ON	F.[id человека] = S.[id человека] AND
		F.RN = S.RN-1


Если нужен только SSIS, то воспользуйтесь sql таском
...
Рейтинг: 0 / 0
SSIS: как сделать такой производный столбец?
    #39493110
IDVT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
create table #table 
(  Id    Int           -- id человека	
 , FDate Date          -- дата1
 , XDate Date          -- дата2
 , Dep   VarChar (36)  -- должность
)
insert into #table 
values ( 1, '02.01.2011', '05.05.2011', 'помощник')
     , ( 1, '02.03.2011', '05.05.2011', 'старший программист')


select Id
     , Fdate
     , lead( DAteAdd( Day
                    , -1
                    , Fdate), 1, XDate)
       over ( partition by Id
              order by FDate)
from #table

drop table #table
...
Рейтинг: 0 / 0
SSIS: как сделать такой производный столбец?
    #39493142
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо вам за ответы))
про lead вообще не знал, теперь просмотрю, что там нового появилось в последние годы.
И да, я действительно сейчас сделал соответствующий таск в ssis с sql-кодом.

Если вдруг кто-то появится, кто обрисует, как это сделать в блоке скрипта, я был бы счастлив :)
...
Рейтинг: 0 / 0
SSIS: как сделать такой производный столбец?
    #39493171
Фотография Дедушка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles WeylandЕсли вдруг кто-то появится, кто обрисует, как это сделать в блоке скрипта, я был бы счастлив :)не нужно это делать скрипт-компонентом.
вы потеряете на производительности (если это имеет значение).
можно эту задачу решить конечно и скрипт-компонентом и даже обычными тасками дата-флоу (без скрипта),
но всё это будет в разы хуже простого запроса из пары строк, что вам привели выше с lead.
вставляете этот запрос в дестинейшен и понеслась :)
...
Рейтинг: 0 / 0
SSIS: как сделать такой производный столбец?
    #39493827
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дедушка,

Спасибо за информацию про производительность. Я сделал запросом. Не lead, конечно (т.к. у меня 2008, а lead доступен с 2012), а с помощью нумерации строк.

Вообще, поскольку данных всё-таки не так много (пара десятков тысяч), и выполняется задача ночью, то производительность вообще не имеет значения. А сделать я такое хотел в познавательных целях.
...
Рейтинг: 0 / 0
SSIS: как сделать такой производный столбец?
    #39493849
IDVT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дедушка, Вам привел не оспоримые аргументы в производительности, + сопровождение....
Если цель академическая, то:

1. Источник данных запрос

Код: sql
1.
2.
3.
4.
5.
6.
select Id
     , Fdate
     , Row_Number()
       over ( partition by Id
              order by FDate) as Num
from #table



2. добавить вычисляемые столбцы (в SSIS) NumM = Num - 1 и FdateM = Fdate - 1 день
3. многоадресная рассылка (поток 1 и поток 2)
4. Left Join потоков по связи [поток 1].Id = [поток 2].ID и [поток 1].Num = [поток 2].NumM
5. Если значение [поток 2].FdateM = null тогда значение [поток 1].XDate иначе [поток 2].FdateM

далее отладите что я упустил,... но к этому лучше не привыкать, сегодня мало данных, через месяц много или еще процессы ETL в одном пакете дадут существенную потерю производительности и затраты на ресурсы.
...
Рейтинг: 0 / 0
SSIS: как сделать такой производный столбец?
    #39493851
IDVT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*ошибся с запросом

Код: sql
1.
2.
3.
4.
5.
6.
7.
select Id
     , Fdate
     , XDate
     , Row_Number()
       over ( partition by Id
              order by FDate)  as Num
from #table
...
Рейтинг: 0 / 0
SSIS: как сделать такой производный столбец?
    #39493853
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем в этом топике за информативное пояснение и различные варианты решений!
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / SSIS: как сделать такой производный столбец?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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