我正在尝试从一些数据库的所有表中查找字段的最大值。我使用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中有这种可能吗?
答案 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或电子表格来生成代码。