在Teradata Query中使用Excel行值

时间:2018-03-14 10:47:02

标签: sql teradata

要求:必须从2个或更多表中选择值,在查询中,条件应从excel记录中获取值(大约5 k)。

查询:

     select 
     distinct 
     tableA.x
    ,tableB.phone_nbr,
     tableC.tmp_oper_div_cd 
     from Table A join Table B on A.id= B.iD
     left join table C on A.fc = C.fc
     left join table h on fc.qr = h.qr
     --h.hldx_cd=s.htl_cd
    where tableB.phone_nbr like  any 
    ('%35051111%' ,'%35051155%','%35051113%','%35051190%')
    and h.hldx_cd='TYOHC'

在上面的查询中,(请忽略连接缺陷等) hldx_cd和Phone_nbr值来自excel,phone_nbr值没有正确的格式。在excel中,我们为每个酒店代码提供大约5 k hldx_cd和多个电话号码。

请让我知道实现这一目标的逻辑。提前谢谢。

1 个答案:

答案 0 :(得分:1)

创建临时表以保存您的电话号码:

CREATE MULTISET VOLATILE TABLE phones (pn VARCHAR(20), hldx_cd VARCHAR(20)) ON COMMIT PRESERVE ROWS;

在excel中为每个电话号码制作一个INSERT语句:

="INSERT INTO phones VALUES ('" & A1 & "', '" & B1 & "');"

假设您的电话号码列表在A栏中,并且它的酒店代码在此处为B列,请将该内容复制下来以生成5000个插入语句。然后将它们复制到您的SQL客户端并运行它们。这需要一段时间,你的DBA会恨你。为了使DBA不受影响,请考虑制作常规表并使用fastload,mload,tpt或bteq导入数据。显然有一点学习曲线(虽然Teradata Studios会让它变得简单)并假设您至少在服务器上的数据库中具有CREATE TABLE的安全性。

现在您可以加入以获得比赛:

SELECT DISTINCT tableA.x
    ,tableB.phone_nbr
    ,tableC.tmp_oper_div_cd
FROM TABLE A
JOIN TABLE B ON A.id = B.iD
LEFT JOIN TABLE C ON A.fc = C.fc
LEFT JOIN TABLE h ON fc.qr = h.qr
INNER JOIN phones ON tableB.phone_nbr = phones.pn AND h.hldx_cd = phones.hldx_cd;

你在这里真的没有很多其他好的选择,因为你的比较数据很大并且在excel中停滞不前,就Teradata而言,它对你没有任何好处。