Teradata - выполнить запрос к каждой таблице, вернуться к тому же набору результатов - PullRequest
1 голос
/ 08 июля 2019

Я пытаюсь найти максимальное значение для поля из всех таблиц в нескольких базах данных. Я использовал 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 Answerset, который я могу скопировать в Excel для анализа. Я знаю, что я мог бы изменить SQL, чтобы вставить данные в таблицу, а затем экспортировать из этой таблицы. Тем не менее, я предполагаю, что есть способ написать цикл For-Each (тип). Что-то вроде:

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 голосов
/ 08 июля 2019

Вы можете использовать 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 или электронную таблицу для генерации кода, если хотите.

0 голосов
/ 08 июля 2019

Нет.И даже если бы вы могли, это все равно сгенерировало бы 900 наборов результатов.

Используйте подход «вставить отдельные результаты в таблицу, затем выбрать из этой таблицы» или выполнить цикл в Excel (используя VBA) и вставлять каждыйрезультатов в новую строку в вашем рабочем листе.

...