2008-10-08 4 views
1

У меня есть данные, загруженные и различные преобразования по данным полной, проблема есть родитель/потомок удалось в данных - лучше всего объяснить на примереКак получить значение из другой строки в пределах одной и той же строки данных?

каждая строка имеет (имена столбцов составлены)

row_key parent_row_key row_name parent_row_name 

некоторые строки имеют row_key == parent_row_key (их собственный родитель) некоторые строки относятся к другой строке (строка 25 является родительским к строке 44, например).

В этом случае строка 25 является родительской для строки 44. Мне нужно поставить row_name строки 25 в parent_row_name строки 44. Как я могу запросить данные в конвейере для значения?

ответ

3

Можете ли вы не просто разделить данные с помощью многоадресной передачи, а затем выполнить объединение слияния с самим собой?

+0

Конечно, проспект стоит попробовать - самая сложная часть продукта учится использовать его для решения проблем. – WIDBA

+0

Излишне говорить, что было бы проще получить любую систему, которую вы запрашиваете, чтобы сделать это за вас, прежде чем принести ее в SSIS, но я думаю, вы не спросите, было ли это подходящим в вашем случае ... – piers7

+0

correct - Мне, возможно, придется перенести данные, а затем выполнить анализ с помощью простых задач Sql -> по крайней мере, пока я не получу винт продукта больше. – WIDBA

0

Вы можете записать свои данные в временную таблицу в своей базе данных, место назначения исходного файла или назначения набора записей (в зависимости от размера вашего набора данных). Затем вы можете снова запустить данные и запросить данные временных данных и найти правильный родитель.

0

Звучит так, как Macola (точное программное обеспечение) обрабатывает транзакции. В их ситуации транзакция добавляется в таблицу, и она включает ссылку на исходную транзакцию в строке - например, если первоначальная транзакция была покупкой в ​​январе, и есть оплата в лифчи, платеж в феврале будет включать в себя номер транзакции из платежа за январь в столбце, ссылающемся на родителя. Поскольку отношения внешнего ключа отсутствуют, каждой начальной транзакции дается указатель, который может перемещаться между книгами по всей системе.

0

Как вы говорите

я данные загружены и различные преобразования по данным полного

может я тогда предположить, у вас уже есть все данные, имеющиеся во временном или промежуточная таблица? Если это так, просто делать ОБНОВЛЕНИЕ поля должно делать трюк, я думаю? Предполагая, что не все данные могут быть доступны в промежуточной таблице, вы можете выполнить каскадный поиск значения из промежуточной таблицы сначала, а затем из фактической таблицы, если ничего не было найдено. Выполнение этого в одном обновлении легко превзойдет выполнение этого по строкам. (особенно если у вас есть соответствующие индексы)

UPDATE staging_table 
    SET parent_row_name = COALESCE(new.row_name, old.row_name, '#N/A#') 
    FROM staging_table upd 
    LEFT OUTER JOIN staging_table new 
       ON new.row_key = upd.parent_row_key 
    LEFT OUTER JOIN destination_table old 
       ON old.row_key = upd.parent_row_key 

 Смежные вопросы

  • Нет связанных вопросов^_^