首页 > 解决方案 > 如何仅在平面文件列之一中加载具有最高值的数据?

问题描述

我有以下平面文件:

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

谢谢你。

标签: sql-servercsvssisetlssis-2012

解决方案


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

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

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

推荐阅读