gpt4 book ai didi

sql-server - 在SSIS中将多行合并为一

转载 作者:行者123 更新时间:2023-12-03 11:13:18 25 4
gpt4 key购买 nike

我目前有一个包含 4 列的平面文件:GateNumber、Status、DateTime 和 Priority。当状态编号为 1 时,门打开。状态编号 2 关闭门。该文件如下所示:

| GateNumber | Status | DateTime          | Priority
---------------------------------------------------------
| 53 | 1 | 2017-07-23 16:00:00 | 2
| 53 | 2 | 2017-07-23 16:01:30 | 2
| 87 | 1 | 2017-07-23 16:03:30 | 3
| 113 | 1 | 2017-07-23 16:04:40 | 2
| 113 | 2 | 2017-07-23 16:05:30 | 2
| 87 | 2 | 2017-07-23 16:07:30 | 3
| 53 | 1 | 2017-07-23 16:09:00 | 2
| 53 | 2 | 2017-07-23 16:09:30 | 2

有没有办法在 SSIS 的数据流中将这些行组合成一个?最终结果将是这样的:
| GateNumber | StartDtm            | EndDtm          | Priority
-------------------------------------------------------------------
| 53 | 2017-07-23 16:00:00 | 2017-07-23 16:01:30 | 2
| 87 | 2017-07-23 16:03:30 | 2017-07-23 16:07:30 | 3
| 113 | 2017-07-23 16:04:40 | 2017-07-23 16:05:30 | 2
| 53 | 2017-07-23 16:09:00 | 2017-07-23 16:09:30 | 2

最佳答案

这是一种确定正确开始和结束日期的方法。我很惊讶在您的来源中没有比门号更好的标识符。如果gatenumber 是唯一的并且不重复,我将使用聚合对象并选择日期时间的最大值和最小值作为开始和结束时间。

建议的解决方案:

第 1 步:使用任何源类型加载源数据

第 2 步:根据 Gatenumber 和 DateTime 对数据进行排序。

这会将您的行按顺序排列,使其具有 1:2 1:2 的顺序

第三步:添加脚本组件(改造)

第 4 步:创建符合您需要的新输出。我称之为"new"

第 5 步:将所有列的输入检查为只读

第 6 步:下面的代码

public DateTime starttime;

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
if (Row.Status == 1)
starttime = Row.DateTime;
else
{
newBuffer.AddRow();
newBuffer.GN = Row.GateNumber;
newBuffer.Start = starttime;
newBuffer.End = Row.DateTime;
newBuffer.priority = Row.Priority;
}


}

注意:public DateTime starttime 是在 RowProcessing 之外声明的。

步骤 7:选择正确的输出并继续

关于sql-server - 在SSIS中将多行合并为一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48417757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com