如何从同一数据管道中的另一行获取值?

时间:2008-10-08 14:33:53

标签: sql sql-server ssis

我已加载数据并对数据进行了各种转换,问题是在数据中管理了父/子关系 - 最好通过示例解释

每一行都有(列名称组成)

row_key    parent_row_key   row_name    parent_row_name

有些行有row_key == parent_row_key(他们自己的父) 一些行与另一行相关 (例如,第25行是第44行的父级)。

在这种情况下,第25行是第44行的父级。我需要将第25行的row_name放在第44行的parent_row_name中。如何查询管道中的数据值?

4 个答案:

答案 0 :(得分:3)

你能不能只使用多播分割数据,然后对自己进行合并连接?

答案 1 :(得分:0)

您可以将数据写入数据库中的临时表,原始文件目标或记录集目标(取决于数据集的大小)。然后,您可以再次运行数据并查询临时数据并找到正确的父数据。

答案 2 :(得分:0)

听起来像Macola(Exact Software)处理交易的方式。在他们的情况下,交易被添加到表格中,并且它包括对行中原始交易的引用 - 例如,如果原始交易是1月份的购买并且有个人付款,则2月付款将包括1月份支付的交易编号,参考父母一栏。由于没有外键关系,因此每个初始事务都有一个guid,可以在系统中的分类账之间移动。

答案 3 :(得分: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