Я настраиваю инструмент интеграции, который перемещает данные из Системы A в Систему B. Я предоставляю оператор SQL SELECT, который выполняется в Системе A, и выходные данные оператора определяют, что в Системе B обновляется. Например, чтобы обновить показатель международных продаж Team 1:
SELECT
'Team1_Int_Sales_Count' Code,
count(*) Count,
to_char(<integration tool date syntax>) Period
FROM
Sales
JOIN
ADozenMoreTables ON stuff
WHERE
ADozenOpaqueFields IN ADozenOpaqueReferences
AND Sales.Date BETWEEN <integration tool date syntax>
AND Team = 'Team1'
AND Sales.Type = 'International'
Он использует возвращенные поля Code
, Value
и Period
, чтобы обновить этот код для этого периода с этим значением. (Поля, идентифицированные в каком порядке, а не по имени.)
Затем, для продажи в команде 1 c, я скопировал и вставил весь запрос, изменил код и один WHERE
предложение:
SELECT
'Team1_Dom_Sales_Count' Code,
<otherwise as above>
AND Sales.Type = 'Domestic'
А затем я копирую и вставляю его еще четыре раза для команд 2 и 3
SELECT
'Team2_Int_Sales_Count' Code,
<snip>
AND Team = 'Team2'
AND Sales.Type = 'International'
SELECT
'Team2_Dom_Sales_Count' Code,
<snip>
AND Team = 'Team2'
AND Sales.Type = 'Domestic'
SELECT
'Team3_Int_Sales_Count' Code,
<snip>
AND Team = 'Team3'
AND Sales.Type = 'International'
SELECT
'Team3_Dom_Sales_Count' Code,
<snip>
AND Team = 'Team3'
AND Sales.Type = 'Domestic'
В полной задаче есть оператор из ~ 60 строк SELECT
с перестановками 3x3x3 и количеством копий / вставок вызывает у меня страх.
Есть ли какой-то способ, которым я могу написать одно SQL SELECT
заявление, которое будет проходить через все перестановки без копирования- вставил повторение? На мой взгляд, у меня были бы перестановки во временной таблице, созданной в виде строки или в виде двумерного массива, и запрос мог бы вернуть код и значение, где совпадают два других поля:
{ {'Team1_Int_Sales_Count', 'Team1', 'International'},
{'Team1_Dom_Sales_Count', 'Team1', 'Domestic'},
{'Team2_Int_Sales_Count', 'Team2', 'International'},
{'Team2_Dom_Sales_Count', 'Team2', 'Domestic'},
{'Team3_Int_Sales_Count', 'Team3', 'International'},
{'Team3_Dom_Sales_Count', 'Team3', 'Domestic'} } Permutations
Ограничения здесь - это инструмент интеграции, требующий, чтобы я поставлял каждую задачу одним оператором SELECT
. Я не могу предварять его оператором WITH
, или объявлять функции, или сохранять сложный запрос как представление в исходной базе данных, или делать что-нибудь забавное или приятное. И это Oracle ODB C соединение, поэтому оно использует Oracle SQL.