SQL server SSIS OLEDB源到目标?
SQL server SSIS OLEDB源到目标?,sql,sql-server,sql-server-2008,ssis,Sql,Sql Server,Sql Server 2008,Ssis,OLEDB源代码表格 Name,Age,Seq Gauraw,30,1 Gauraw,31,1 Kiran,28,3 Kiran,29,3 kiran,28,3 Venkatesh,,4 Venkatesh,28,4 我想要OLEDB目的地 Gauraw,31,1 kiran,28,3 Venkatesh,28,4 基本上,我是从oledb_源到oledb_目标 我的条件是,如果重复seq列,我希望最后一行的seq列与上表Kiran类似,28,3是seq的最后一个条目,值为3 在SSIS数据
OLEDB源代码
表格
Name,Age,Seq
Gauraw,30,1
Gauraw,31,1
Kiran,28,3
Kiran,29,3
kiran,28,3
Venkatesh,,4
Venkatesh,28,4
我想要OLEDB目的地
Gauraw,31,1
kiran,28,3
Venkatesh,28,4
基本上,我是从oledb_源
到oledb_目标
我的条件是,如果重复seq
列,我希望最后一行的seq
列与上表Kiran类似,28,3
是seq
的最后一个条目,值为3
在SSIS数据流任务中,如何从oledb源
到oledb目标
选择OLE DB源来实现此结果
将数据访问模式更改为“SQL命令”,然后将查询粘贴到下面
with x as (select *,rn=row_number() over (order by name)
from source)
select a.*
from x a ,
(select name , max(rn) rn
from x
group by name) b
where a.rn = b.rn
现在您可以移动所需的列,因为SSI成批插入数据,所以您无法根据前一行的情况决定一行的情况,因此我建议在源查询中处理它。
我不知道你的逻辑,但看起来你想按名字分组,并获得最大年龄和序列。由于年龄和顺序永远不会减少,您可以使用MAX函数:
select Name, max(age) as age, max(seq) as seq
from your_table
group by Name
您是否有其他列要处理(Id或时间戳)?您可以使用ROW_NUMBER窗口函数获取序列中的最后一条记录,但需要对结果集进行排序。如果没有Id或时间戳,您将无法获得所需的结果…不,我没有这样的列
。您可以添加一个吗?一个标识列,或者在insert时将DateTime设置为GETDATE(),都可以正常工作。您的需求似乎表明可以将多条相同的记录添加到表中,但在某些情况下,您希望只保留最近添加的记录(来自每个序列)。如果您没有列来标识最新添加的记录,那么您依赖于表中记录的顺序(heap?),这是绝对不推荐的。