#sql #oracle #create-view
#sql #Oracle #создать-просмотр
Вопрос:
У меня есть представление, и я использовал 2 варианта выбора, чтобы использовать функцию ранжирования. Есть ли способ оптимизировать это и избежать 2 предложений выбора и сделать его единым.
Запрос выглядит следующим образом :
CREATE OR REPLACE VIEW "TEMP" (
"P_LOCAL_POLICY_ID",
"P_GIRDA_POLICY_ID",
"C_OE_CONS_UNIT_TITLE",
"C_ROW_NUMBER",
"C_LOAD_TIMESTAMP",
"ERROR_TEXT",
"RECORD_2_DELETE",
"ERROR_TIMESTAMP",
"RANK_NUMBER"
) AS
SELECT
p_local_policy_id,
p_girda_policy_id,
c_oe_cons_unit_title,
c_row_number,
c_load_timestamp,
err_error_text,
err_record_2_delete,
err_load_timestamp,
RANK() OVER(PARTITION BY
err_error_text
ORDER BY
ROWNUM
)
FROM
(
SELECT
po.local_policy_id AS p_local_policy_id,
po.girda_policy_id AS p_girda_policy_id,
MAX(cl.oe_cons_unit_title) AS c_oe_cons_unit_title,
SUM(cl.row_number) AS c_row_number,
MAX(cl.load_timestamp) AS c_load_timestamp,
error.error_text AS err_error_text,
error.record_2_delete AS err_record_2_delete,
error.load_timestamp AS err_load_timestamp
FROM
<condition>
WHERE
<condition>
GROUP BY
po.local_policy_id,
po.girda_policy_id,
error.error_text,
error.record_2_delete,
error.load_timestamp
);
Спасибо,
Читра
Ответ №1:
Вы можете объединить два блока списка выбора как
CREATE OR REPLACE VIEW TEMP AS
SELECT po.local_policy_id AS "P_LOCAL_POLICY_ID",
po.girda_policy_id AS "P_GIRDA_POLICY_ID",
MAX(cl.oe_cons_unit_title) AS "C_OE_CONS_UNIT_TITLE",
SUM(cl.row_number) AS "C_ROW_NUMBER",
MAX(cl.load_timestamp) AS "C_LOAD_TIMESTAMP",
error.error_text AS "ERROR_TEXT",
error.record_2_delete AS "RECORD_2_DELETE",
error.load_timestamp AS "ERROR_TIMESTAMP",
RANK() OVER( PARTITION BY err_error_text ORDER BY 1 ) AS "RANK_NUMBER"
FROM <condition>
WHERE <condition>
GROUP BY po.local_policy_id, po.local_region,
error.error_text, error.record_2_delete, error.load_timestamp
- нет необходимости перечислять псевдонимы столбцов после имени представления.
- символы подчеркивания могут быть удалены в именах столбцов, таких как
"P LOCAL POLICY ID"
вместо"P_LOCAL_POLICY_ID"
как уже заключенные в кавычки
Комментарии:
1. я могу дать вам полный код, могу ли я прикрепить его в виде файла здесь?
2. ORA-00979: не ГРУППИРУЕТСЯ По выражению 00979. 00000 — «не ГРУППИРУЕТСЯ ПО выражению»
3. это говорит слишком долго
4. я обновил код в главном разделе. пожалуйста, проверьте
5. @chithra просто замените
ROWNUM
константой, такой1
как в предложении ORDER BY аналитической функции. Поскольку это искажает группировку как неагрегированный столбец.