【问题标题】:Using Excel row values in Teradata Query在 Teradata Query 中使用 Excel 行值
【发布时间】:2018-03-14 22:03:14
【问题描述】:

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

查询:

     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 中,我们得到大约 5k hldx_cd,每个酒店代码都有多个电话号码。

请告诉我实现这一点的逻辑。提前致谢。

【问题讨论】:

    标签: sql teradata


    【解决方案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 而言它对您没有任何好处。

    【讨论】:

    • 但问题是:tableB.Phone_NBR 将有一个值需要与值模式进行比较:tableB.phone_nbr like any ('%35051111%' ,'%35051155%', '%35051113%','%35051190%') ,那么如何对列值使用任何东西? - 谢谢
    猜你喜欢
    • 2018-01-19
    • 1970-01-01
    • 2022-11-11
    • 2022-01-13
    • 1970-01-01
    • 2016-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多