Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL server SSIS OLEDB源到目标?_Sql_Sql Server_Sql Server 2008_Ssis - Fatal编程技术网

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?),这是绝对不推荐的。