Это запрос, который не работает:
SELECT distinct ord.DateOrdered , (SELECT docno FROM th_mm_c_orderline_history WHERE th_mm_c_orderline_history_id in (SELECT max(th_mm_c_orderline_history_id) FROM th_mm_c_orderline_history GROUP BY c_orderline_id ) order by docno,c_orderline_id) as docno FROM c_order ord INNER JOIN c_orderline on c_orderline.c_order_id = ord.c_order_id INNER JOIN th_mm_c_orderline_history on th_mm_c_orderline_history.c_order_id=ord.c_order_id
Мне выдает ошибку ORA-00936 Missing expression
Этот запрос работает нормально:
SELECT docno FROM th_mm_c_orderline_history WHERE th_mm_c_orderline_history_id in (SELECT max(th_mm_c_orderline_history_id) FROM th_mm_c_orderline_history GROUP BY c_orderline_id ) order by docno,c_orderline_id as docno
Подзапрос внутри скалярного подзапроса завершается с ошибкой ORA-00936 Missing Expression
comment
Привет @nonsrithong, пожалуйста, покажи нам в виде текста запрос, который не работает?
- person VBoka   schedule 29.05.2020
comment
Выберите отчетливый ord.dateordored, (выберите docno from th_mm_c_Orderline_c_Orderline_history_id in (select max (th_mm_c_orderline_history_id) из th_mmm_c_Orderline_history chordo, c_Orderline_id) Как docno из c_order ord Внутренний Присоединяйтесь к C_Orderline на C_ORDERLINE.C_ORDER_ID = th_mm_c_orderline_history на th_mm_c_orderline_history.c_order_id=ord.c_order_id
- person non srithong   schedule 29.05.2020
comment
Пожалуйста, не размещайте код в виде изображений. См. здесь для более подробной информации, почему: meta.stackoverflow.com/questions/285551
- person a_horse_with_no_name   schedule 29.05.2020
Ответы (2)
Просто удалите предложение order by из встроенного выбора. Вы не можете использовать предложение orde by там. Вы можете использовать его во внешнем выборе, если вам это нужно... Вот как вы можете сделать все три из них без ошибки:
SELECT distinct ord.DateOrdered
, (SELECT docno FROM th_mm_c_orderline_history
WHERE th_mm_c_orderline_history_id
in (SELECT max(th_mm_c_orderline_history_id)
FROM th_mm_c_orderline_history
GROUP BY c_orderline_id)
) as docno
FROM c_order ord
INNER JOIN c_orderline on c_orderline.c_order_id = ord.c_order_id
INNER JOIN th_mm_c_orderline_history on th_mm_c_orderline_history.c_order_id=ord.c_order_id
person
VBoka
schedule
29.05.2020
Привет @nonsrithong, надеюсь, мой ответ помог тебе. Пожалуйста, проверьте, что делать, если это помогло или правильно: stackoverflow.com/help/someone-answers
- person VBoka; 29.05.2020
Вы можете использовать «порядок по оператору» в конце всего оператора выбора. Из-за того, что столбец C_ORDERLINE_ID не используется в операторе выбора, это может привести к ошибке в порядке за оператором. Попробуйте эту версию ниже.
SELECT DISTINCT
C_ORDER.DATEORDER,
(SELECT DOCNO
FROM TH_MM_C_ORDERLINE_HISTORY
WHERE C_ORDER_ID = C_ORDER_ID
AND TH_MM_C_ORDERLINE_HISTORY_ID IN ( SELECT MAX (TH_MM_C_ORDERLINE_HISTORY_ID)
FROM TH_MM_C_ORDERLINE_HISTORY
GROUP BY C_ORDERLINE_ID)) AS DOCNO,
C_ORDER.DOCUMENTNO
FROM C_ORDER
INNER JOIN C_ORDERLINE ON C_ORDERLINE.C_ORDER_ID = C_ORDER_ID
ORDER BY DOCNO, C_ORDERLINE_ID;
person
WolfStar
schedule
29.05.2020