我有
**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
答案 0 :(得分: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
答案 1 :(得分:0)
由于您已达到目前为止,最简单的方法是使用聚合器。
假设M3和M4s的值是Numeric 1.首先将所有NULL转换为零。
使用基于所有其他列的聚合器阶段和组(总和(M3)和总和(M4)
理想情况下应该为您提供所需的内容
另一种方法是在文件上使用多个查找。
源阶段将从源表中提取数据。
首先查找M1(查找条件将包含所有键和T = M1)从文件中获取M1的值,将其保存在名为M1的新列中。
然后另一个查找M2(查找条件将具有所有键AND T = M2)。从文件中获取M1的值,将其保存在名为M1的新列中。
....等等你需要的所有M列。 所以在所有看起来结束时;如果您按预期执行 - 那么您的最终输出链接应该是您要查找的输出
这两个步骤都有积极的和消极的。
Ashish
答案 2 :(得分:0)
试试这个解决方案:
1)读取顺序文件并使用pivot stage with option作为Horizontal Pivoting将Rows转换为列。现在输出将是 拉吉,1100200
2)使用查询阶段,其中来自步骤1的主要数据和来自表格的参考数据以及基于RNO的查找作为关键。
在步骤2之后,输出将是Raj,1,25,26,100,200