如何仅在平面文件列之一中加载具有最高值的数据?

时间:2019-02-25 17:27:37

标签: sql-server csv ssis etl ssis-2012

我有以下平面文件:

ColumnA              Quantity              BatchID
1                          10                            100
1                              10                           200
2                              20                           100
2                              20                           200
3                              30                           100
3                              30                           200

如何仅将最高BatchID(即BatchID 200)中的数据加载到SQL Server数据库中?

在上面的示例中,我想将此数据加载到我的数据库中:

ColumnA              Quantity              BatchID
1                              10                           200
2                              20                           200
3                              30                           200

谢谢。

1 个答案:

答案 0 :(得分:0)

StackOverflow并不是要提供解决方案,而是要解决OP已经尝试过某些问题的特定问题。发表问题时请记住这一点。

话虽如此,有两种潜在的解决方案:

  1. 将数据加载到临时表中,然后使用具有内联视图的SELECT进行INSERT,该内联视图根据MAX值进行SELECT。必须使用内联视图,因为您不能在谓词中使用聚合,因此必须运行单独的SELECT来获取最大值-或者可以将其分解为Common Table Expression(CTE),然后从中进行SELECT。 / li>
  2. 在SSIS中内联执行。首先,根据BatchId和Quantity对列进行排序(我假设这是您的排序方式)。然后使用脚本任务将数量存储在变量中。现在,在每一行上运行并将输入的值与存储的值进行比较:如果大于,则可以设置一个名为IsMaxValue的新BIT列。从那里开始,执行条件拆分,将IsMaxValue == 1的行发送到数据库。