【发布时间】:2016-01-29 23:48:34
【问题描述】:
我有点卡住了,任何人都可以在这里帮助我。我有两个具有以下结构的表。
Table 1
Id String
Code1 String
Code2 String
Table 2
Id String
UserCode String
UniversalCode String
我需要做的是用表 2 中的 UniversalCode 替换 code1 和 code2 中的所有值。更清楚地说,如果 code1 与 UserCode 匹配,则用 UniversalCode 替换 Code1,如果 code2 与 usercode 匹配,则再次为同一记录用通用代码替换它。如果没有匹配,则保留 code1 和 code2 的值。我需要获取表 1 中的所有记录。表 1 和表 2 通过 Id 连接。
我为一列尝试了以下内容,但在添加 code2 时遇到了问题
SELECT
Id,
CASE WHEN a.Code1 = b.UserCode then b.UniversalCode else a.Code1 end
from table1 a
LEFT OUTER JOIN table2 b ON (a.Id = b.Id and a.code1 = b.UserCode);
有什么建议可以完成这项工作吗? , 真实场景有 5-6 列我需要应用相同的逻辑。
Test Data
Table 1
1,123,ABCD
1,ABCD,123
1,456,BCD
1,BCD,789
1,789,100
Table 2
1,123,XXX
1,456,YYY
1,789,ZZZ
2,123,XXX
2,456,YYY
2,789,ZZZ
Output
1,XXX,ABCD
1,ABCD,XXX
1,YYY,BCD
1,BCD,ZZZ
1,ZZZ,100
output with a.id=b.id in Join(Please refer below comments for this output)
1 123 XXX 100 100
1 123 123 100 100
1 123 123 100 100
1 ABCD ABCD 101 101
1 ABCD ABCD 101 101
1 ABCD ABCD 101 101
1 456 456 DEF DEF
1 456 YYY DEF DEF
1 456 456 DEF DEF
1 BCD BCD 789 789
1 BCD BCD 789 789
1 BCD BCD 789 ZZZ
1 789 789 CDE CDE
1 789 789 CDE CDE
1 789 ZZZ CDE CDE
1 100 100 HBT HBT
1 100 100 HBT HBT
1 100 100 HBT HBT
1 100 100 123 XXX
1 100 100 123 123
1 100 100 123 123
【问题讨论】:
-
使用
=而不是==。 -
@vkp :好的,但是我如何为第二列添加逻辑。我当时就卡住了。
-
是的..您必须重复多次,以更改要更改的列数
-
@vkp:如果您查看连接条件,我在其中使用了 Id 和 Code1。我也可以将 Code2 添加到 On 条件中,但这会导致正确答案
-
我认为
a.id=b.id在join子句中就足够了。
标签: sql hadoop hive hql jointable