#oracle #oracle-data-integrator
#Oracle #oracle-data-integrator
Вопрос:
У меня есть такая таблица:
CREATE TABLE risk_test
(id VARCHAR2 (32) NOT NULL PRIMARY KEY,
customer_id varchar2 (40BYTE),
risk number,
day VARCHAR2(50 BYTE))
insert into risk_test values(1,102,15,1);
insert into risk_test values(2,102,16,1);
insert into risk_test values(3,104,11,1);
insert into risk_test values(4,102,17,2);
insert into risk_test values(5,102,10,2);
insert into risk_test values(6,102,13,3);
insert into risk_test values(7,104,14,2);
insert into risk_test values(8,104,13,2);
insert into risk_test values(9,104,17,1);
insert into risk_test values(10,104,16,2);
Я хочу рассчитать общий риск и сохранить результат в новой таблице. Итак, я создаю процедуру в ODI и записываю в нее этот запрос:
create table risk_odi as
SELECT o.*,ROUND (
SUM (day_minus_day0 * risk) OVER (PARTITION BY customer_id)
/ SUM (day_minus_day0) OVER (PARTITION BY customer_id),
5) AS total_risk
FROM (SELECT rt.*, (rt.day - MIN (rt.day) OVER (PARTITION BY customer_id)) 1 AS day_minus_day0
FROM risk_test rt) o
ORDER BY customer_id, TO_NUMBER (day), TO_NUMBER (id)
Результирующая таблица выглядит следующим образом:
Мой вопрос заключается в том, что я хочу создать таблицу в сопоставлении; поэтому, не могли бы вы указать мне, как я могу выполнить приведенный выше запрос в сопоставлении, используя компонент Aggregate или компонент Expression?
Любая помощь действительно ценится.
Ответ №1:
Проблема решена. Я использую эту структуру при отображении:
Сначала я использую фильтр, чтобы извлечь последние тридцать дней и сохранить их в таблице тридцатых дней. После этого я использую aggregate для группировки данных на основе customer_id и вычисления минимального дня в каждой группе. Затем объединение совокупного результата с тридцатым днем. Последний агрегат предназначен для вычисления total_risk на основе группировки customer_id. Наконец, я сохраняю данные в последнюю таблицу, которая является результатом.