Teradata-在每个表上运行查询,返回相同的结果集

时间:2019-07-08 16:31:33

标签: sql teradata

我正在尝试从一些数据库的所有表中查找字段的最大值。我使用Excel编写了所有900多个表的查询。

SELECT 'db1' Db,'tbl1' Tbl, MAX(LOAD_DT) AS MAX_LOAD_DT FROM db1.tbl1;
SELECT 'db1' Db,'tbl2' Tbl, MAX(LOAD_DT) AS MAX_LOAD_DT FROM db1.tbl2;
SELECT 'db2' Db,'tbl1' Tbl, MAX(LOAD_DT) AS MAX_LOAD_DT FROM db2.tbl1;

问题是这将返回900多个答案集。我想要1个答案集,可以将其复制到Excel中进行分析。 我知道我可以更改SQL以将数据插入表中,然后从该表中导出。但是,我假设有一种编写For-Each(type)循环的方法。像这样:

Foreach tablename in tablenamess (SELECT DATABASENAME, TABLENAME, MAX(LOAD_DT) AS MAX_LOAD_DT)
From DBC.TABLESV
WHERE DATABASENAME IN ('Db1', 'Db2')

在Teradata中有这种可能吗?

2 个答案:

答案 0 :(得分:0)

不。即使可以,仍会生成900个结果集。

使用“将单个结果插入表中,然后从该表中选择”方法或在Excel中进行循环(使用VBA),然后将每个结果插入工作表中的新行中。

答案 1 :(得分:0)

您可以使用union all

SELECT 'db1' Db,'tbl1' Tbl, MAX(LOAD_DT) AS MAX_LOAD_DT FROM db1.tbl1
UNION ALL
SELECT 'db1' Db,'tbl2' Tbl, MAX(LOAD_DT) AS MAX_LOAD_DT FROM db1.tbl2
UNION ALL
SELECT 'db2' Db,'tbl1' Tbl, MAX(LOAD_DT) AS MAX_LOAD_DT FROM db2.tbl1;

这将返回一个结果集,但是您仍然需要显式列出每个数据库和表。您可以根据需要使用元数据表和SQL或电子表格来生成代码。