Среда: Db2 для i, версия 7.3
Структура библиотеки / таблицы:
CORPORATE/TENANTS
LIB01/INVOICE
LIB02/INVOICE
LIB03/INVOICE
…
LIBxx/INVOICE
Таблица CORPORATE/TENANTS
содержит список библиотек, в которых хранится информация о каждом арендаторе. Имеет такую структуру и данные:
CREATE OR REPLACE TABLE TENANTS (
ID BIGINT GENERATED ALWAYS AS IDENTITY (START WITH 1),
TENANT CHAR(10) NOT NULL,
PRIMARY KEY(ID)
) RCDFMT TENANTSR;
RUNSQLSTM SRCFILE(HILLB/QDDLSRC) SRCMBR(TENANTS) DFTRDBCOL(CORPORATE)
+--+------+
|ID|TENANT|
+--+------+
| 1|LIB01 |
| 2|LIB02 |
|..|......|
|99|LIB99 |
+--+------+
Все таблицы LIBxx/INVOICE
идентичны друг другу и имеют такую структуру:
CREATE OR REPLACE TABLE INVOICE (
ID BIGINT GENERATED ALWAYS AS IDENTITY (START WITH 1),
PAYDAT INTEGER(6,0) NOT NULL,
AMOUNT DECIMAL(15,2) NOT NULL DEFAULT 0,
PRIMARY KEY(ID)
) RCDFMT INVOICER;
+--+------+------+
|ID|PAYDAT|AMOUNT|
+--+------+------+
| 1|180701|100.00|
| 2|180801| 35.00|
|..|......|......|
+--+------+------+
Я хочу сформировать список сумм счетов для всех арендаторов на указанную дату:
180701 LIB01 100.00
180701 LIB02 140.00
180701 LIB03 74.00
…
Концептуально, что я хочу сделать, это (да, я знаю, что это неверный SQL):
SELECT PAYDAT, TENANT, AMOUNT
FROM $X.INVOICE
WHERE PAYDAT = 180701;
Я хочу получить данные из таблицы INVOICE
для каждого TENANT
, но я знаю, что предложение FROM
не может быть таким динамическим. Я уверен, что у такого запроса есть имя, но я не знаю, что это такое, поэтому я не могу эффективно использовать поисковую систему, чтобы найти то, что мне нужно.
Это было бы тривиально решить с помощью программы RPGLE, но мне нужно решение на чистом SQL.
Обратите внимание - значения LIBxx НЕ МОГУТ быть жестко закодированы. Эти значения могут измениться в любое время.