#sql #oracle
#sql #Oracle
Вопрос:
Следующий запрос работает….
SELECT art.cmp_lvl,
(
CURSOR (
SELECT a.cmp_lvl,
(
CURSOR (
SELECT b.cmp_lvl_code,
b.v1 "R_ST",
b.f_name
FROM temp_data b
WHERE b.cmp_lvl = a.cmp_lvl
ORDER BY SEQ
)
) employee
FROM temp_data a
WHERE a.cmp_lvl = art.cmp_lvl
GROUP BY a.cmp_lvl
)
) g_pos_record
FROM temp_data art
WHERE art.report_name = 'EMP_REPORT'
GROUP BY cmp_lvl
ORDER BY cmp_lvl DESC;
Затем я просто добавляю другое имя столбца, как показано ниже
SELECT art.cmp_lvl,
art.v1 /*ADDED THIS LINE, SHOWS AN ERROR IN THIS LINE */
(
CURSOR (
SELECT a.cmp_lvl,
a.v1 /*ADDED THIS LINE */
(
CURSOR (
SELECT b.cmp_lvl_code,
b.v1 "R_ST",
b.f_name
FROM temp_data b
WHERE b.cmp_lvl = a.cmp_lvl
AND b.v1 = a.v1 /*ADDED THIS LINE */
ORDER BY SEQ
)
) employee
FROM temp_data a
WHERE a.cmp_lvl = art.cmp_lvl
AND a.v1 = art.v1 /*ADDED THIS LINE */
GROUP BY a.cmp_lvl
)
) g_pos_record
FROM temp_data art
WHERE art.report_name = 'EMP_REPORT'
GROUP BY cmp_lvl
ORDER BY cmp_lvl DESC;
Ошибка: ORA-00904: «ART», «V1»: недопустимый идентификатор
00904. 00000 — «%s: недопустимый идентификатор» «Причина
* Ошибка действия в строке 2
Я не могу понять, почему. Добавленный столбец находится в таблице (наверняка).
Комментарии:
1. отсутствие запятой — это одна из проблем, вам нужно сгруппировать по недавно добавленному полю или получить совокупное значение этого
2. Спасибо. Исправлено, и вы ответили по существу.
3. хорошо, что вы помните, что вопрос был задан 2 недели назад: O
Ответ №1:
Вы объединяете свои данные в одну результирующую строку для каждого cmp_lvl ( GROUP BY cmp_lvl
). Затем вы хотите показать версию v1 cmp_lvl. Однако, поскольку существует несколько строк для каждого cmp_lvl, которые вы агрегируете, v1 какой строки должен быть показан?
Более того, после art.v1
не хватает запятой.
Одно из решений состоит в том, чтобы выбрать для одного v1, например:
SELECT art.cmp_lvl,
MAX(art.v1),
...