Sql 在Teradata查询中使用Excel行值
要求:必须从2个或多个表中选择值,在查询中,条件应采用excel记录中的值(约5 k) 查询:Sql 在Teradata查询中使用Excel行值,sql,teradata,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
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,每个酒店代码有多个电话号码
请让我知道实现这一目标的逻辑。提前感谢。创建一个临时表来存放您的电话号码:
CREATE MULTISET VOLATILE TABLE phones (pn VARCHAR(20), hldx_cd VARCHAR(20)) ON COMMIT PRESERVE ROWS;
在excel中,为每个电话号码制作插入语句:
="INSERT INTO phones VALUES ('" & A1 & "', '" & B1 & "');"
假设你的电话号码列表在A栏,酒店代码在B栏,把它复制下来,做5000条插入语句。然后将它们复制到sql客户端并运行它们。这需要一段时间,你的DBA会讨厌你。为了使DBA远离您的后备,考虑创建一个常规表,并使用FASTLoad、MultLoad、TPT或BTEQ导入您的数据。显然,这是一个小小的学习曲线(尽管Teradata Studios会让它变得很快),并且假设您至少在服务器上的数据库中具有创建表的安全性
现在,您可以加入以获取您的匹配项:
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\u NBR将有一个单独的值,需要与一个值模式进行比较:tableB.Phone\u NBR和其他任何值一样(“%35051111%”、“%35051155%”、“%35051113%”、“%35051190%”),那么怎样才能对列值使用like-any呢?-谢谢