1

我有

**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

如果我加入 需要文件输出的表

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
4

3 回答 3

0

试试这个解决方案:

1)读取顺序文件并使用带有选项作为水平旋转的枢轴阶段将行转换为列。现在输出将是 Raj,1,100,200

2) 使用查找阶段,主要数据来自步骤 1,参考数据来自 Table 和基于 RNO 的查找作为键。

在第 2 步之后,输出将为 Raj, 1, 25, 26, 100, 200

于 2015-03-23T09:24:53.427 回答
0

您可以将条件聚合与max,case和一起使用group 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
于 2015-03-11T15:06:32.100 回答
0

既然您已经走到了这一步,最简单的方法是使用聚合器。

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

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

  2. 理想情况下,这应该给你你正在寻找的东西

另一种方法是对文件使用多次查找。

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

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

  3. 然后再次查找 M2(查找条件将包含所有键和 T=M2)。从文件中获取 M1 的值,将其保存在名为 M1 的新列中。

  4. .... 对于您需要的所有 M 列,依此类推。所以在所有查找结束时;如果您按预期进行 - 那么您最终的输出链接应该是您正在寻找的输出

这两个步骤都有其积极和消极的一面。

阿什什

于 2015-03-17T15:20:49.243 回答