时间:2017-05-18 06:55:30

标签: sql teradata

我正在将三个以管道分隔符分隔的电话号码加载到Teradata DWH中的一列。

  1. 如果一行中存在所有三个电话号码,则值应为 看起来像123 | 456 | 789。
  2. 如果第一个和第三个存在则123 | 789
  3. 如果第一个和第二个存在而不是123 | 456
  4. 如果存在第二个和第三个,那么456 | 789。
  5. 写入的查询存在一些问题,如果缺少任何电话号码,如果第二个电话号码丢失,则表示存储的值为123 | | 789,或者如果缺少第三个电话号码,则为给123 | 456 |

    我们不希望尾随管道或两条管道。请建议Teradata查询来实现此目的。

1 个答案:

答案 0 :(得分:-1)

逻辑是:

为每列分配不同的权重,然后评估所有3列的长度的加权和。假设每个电话号码长10位数。这是查询/伪代码

查询:

Select
case 1*LENGTH(firstCol)+2*LENGTH(secondCol)+4*LENGTH(thirdCol)
when 70 then CONCAT( firstcol,'|', secondcol,'|', thirdCol)  
when 60 then CONCAT( secondcol, '|', thirdCol)
when 50 then CONCAT( firstcol, '|', thirdCol)
when 30 then CONCAT (firstcol, '|', secondcol)
when 10 then firstcol
when 20 then secondcol
when 40 then thirdCol
else null
end
from phoneNumbersTable