如何根据列优先级选择列子集

时间:2019-06-25 12:52:16

标签: sql hive hiveql

从一个应用程序中选择并插入另一个应用程序。第一个系统有9个电话号码字段,第二个系统只有4个。我不想将静态的4从旧映射到新。对于每个数据记录,我都希望根据优先级以及是否填充来选择。

这似乎是查找第X个非空列的一种练习。

我确定这一定是另一个问题的重复,但是我还没有找到那个问题...

对于第一个非空值,COALESCE当然很有效:

TargetColumn1 = coalesce(SourcePriorityColumn1, SourcePrioritycolumn2, SourcePriorityColumn3,...,SourcePriorityColumn9)

对于第二优先级(“第二非空列”),它变得更加复杂:

TargetColumn2 =
SELECT
CASE
when Col1 is not null then coalesce(Col2, Col3, Col4, ... , col9)
else when Col2 is not null then coalesce(col3, col4, col5, ... , col9)
else when Col3 is not null then coalesce(col4, col5, col6, ... , col9)
...
else Col9

我知道从哪里开始查找第三或第四非空列。

请注意,我仅限于可以在SELECT语句中完成的操作-无程序语言。但是,如果需要,我可以创建临时表。

谢谢!

0 个答案:

没有答案