如何在datastage中为每个重复的id行获取一条记录

时间:2015-03-11 14:47:53

标签: sql db2 etl datastage

我有

**Table**

Name,RNo,M1,M2,M3,M4

Raj,1,25,26,Null,Null

**File**

Name,RNo,M,T

Raj,1,100,M3

Raj,1,200,M4

如果我与File连接表 输出需要

Name,RNo,M1,M2,M3,M4

Raj,1,25,26,100,200

由于数据来自文件,我无法通过查询获取数据。这里无法加入数据

我正在获取数据

Name,RNo,M1,M2,M3,M4

Raj,1,25,26,100,NULL

Raj,1,25,26,NULL,200

3 个答案:

答案 0 :(得分:0)

您可以对maxcasegroup by使用条件聚合:

select t1.name, t1.rno, t1.M1, t1.M2, 
    max(case when f.t = 'M3' then f.M end) M3,
    max(case when f.t = 'M4' then f.M end) M4
from table1 t1
    join file f on t1.name = f.name and t1.rno = f.rno
group by t1.name, t1.rno

答案 1 :(得分:0)

由于您已达到目前为止,最简单的方法是使用聚合器。

假设M3和M4s的值是Numeric 1.首先将所有NULL转换为零。

  1. 使用基于所有其他列的聚合器阶段和组(总和(M3)和总和(M4)

  2. 理想情况下应该为您提供所需的内容

  3. 另一种方法是在文件上使用多个查找。

    1. 源阶段将从源表中提取数据。

    2. 首先查找M1(查找条件将包含所有键和T = M1)从文件中获取M1的值,将其保存在名为M1的新列中。

    3. 然后另一个查找M2(查找条件将具有所有键AND T = M2)。从文件中获取M1的值,将其保存在名为M1的新列中。

    4. ....等等你需要的所有M列。 所以在所有看起来结束时;如果您按预期执行 - 那么您的最终输出链接应该是您要查找的输出

    5. 这两个步骤都有积极的和消极的。

      Ashish

答案 2 :(得分:0)

试试这个解决方案:

1)读取顺序文件并使用pivot stage with option作为Horizo​​ntal Pivoting将Rows转换为列。现在输出将是 拉吉,1100200

2)使用查询阶段,其中来自步骤1的主要数据和来自表格的参考数据以及基于RNO的查找作为关键。

在步骤2之后,输出将是Raj,1,25,26,100,200