Мы используем систему ERP, вот один запрос sql ниже - и он работает:
(используется старый синтаксис)
(select last_name||' '||name||' '||to_char(datum_p,'DD.MM.YYYY')
from
(
select co.kod_id, bu.last_name, bu.name, cl.datum_p, ctl.rid, md.short_name
from ord_odb_l cl, ord_odb_o co, b_users bu, ct_l ctl, m_delivery md
where co.rid_o = cl.rid and bu.id = cl.operator and cl.delivery_place = md.rid
and cl.operator not IN (161,245,46,120,43,184) order by cl.datum_p desc
) aa
where aa.kod_id = orders.SK_ID and aa.rid = orders.rid_ct_a
and aa.short_name = orders.md and aa.datum_p > orders.datum_ok and rownum = 1)
Я хочу использовать NVL function
для выбора имен и дат между заказами - распределение:
(но я думаю, что это невозможно с подзапросом или мне не удалось, , поскольку я получаю ошибку - missing right parenthesis
)
(select last_name||' '||name||' '||to_char(datum_p,'DD.MM.YYYY')
from
(
NVL(
(select co.kod_id, bu.last_name, bu.name, cl.datum_p, ctl.rid, md.short_name
from ord_odb_l cl, ord_odb_o co, b_users bu, ct_l ctl, m_delivery md
where co.rid_o = cl.rid and bu.id = cl.operator and cl.delivery_place = md.rid
and cl.operator not IN (161,245,46,120,43,184) order by cl.datum_p desc),
(select vo.kod_id, bu.last_name, bu.name, vl.datum_p, ctl.rid, md.short_name
from distrb_l vl, distrb_o vo, b_users bu, ct_l ctl, m_delivery md
where vo.rid_o = vl.rid and bu.id = cl.operator and cl.delivery_place = md.rid
and cl.operator not IN (161,245,46,120,43,184) order by vl.datum_p desc)
)
) aa
where aa.kod_id = orders.SK_ID and aa.rid = orders.rid_ct_a
and aa.short_name = orders.md and aa.datum_p > orders.datum_ok and rownum = 1
)
Если нужно, мы можем присоединиться к distrb_l
и ord_odb_l
тоже:
(select * from ord_odb_l cl join distrb_l vl ON cl.rid = vl.rid_v)
для помощи:
У нас есть таблицы: ord_odb_l
(заголовок заказов) и ord_odb_o
(содержимое заказов), distrb_l
(заголовок распределения) и distrb_o
(содержимое распространения), b_users
(таблица пользователей), ct_l
(таблица цен), m_delivery
(таблица доставки)
Столбцы: kod_id
(число), last.name - name
(varchar2), datum_p
(дата), rid
(число), short_name
(varchar2), operator
(число), delivery_place
(число)
Фактическая таблица: orders
Я знаю, что это сложно и трудно читать, но как я могурешить эту проблему и достичь лучшей производительности?Любая помощь будет принята с благодарностью.