Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 обьединить 2 запроса в один  [new]
1dva3
Member

Откуда:
Сообщений: 35
Добрый день!

Я написал 2 запроса. В первом мне нужно end_sysdate и выводит 20 столбцов, а во втором begin_sysdate также 20 столбцов. Запросы очень большие сократил как мог.
Теперь не знаю как их объединить.

select cs.id filial_id,t.region_id, r.name region,
prtd.name prtd_name,
si.siebel_user_name ,
empl.lfm ,
count (case when dg.id in(1,100001) and od.action_id in (5,7) then 1 end) TELEFON --novye USTANOVKI action id=5
from db.order_device od,
db.abonent_group ag,
db.abonent a,
db.region r,
db.town t,
db.device_group dg,
db.priority pr,
db.report_date rd,
db.action ac,
zrdt.employee@zrdt empl,
zrdt.portal_department@zrdt prtd,
db.order_siebel_info si,
db.connect_type ct,
db.budget b,
db.sap_client sap,
db.crm_server cs
where si.order_id = od.id and a.budget_id = b.id and
sap.id = b.sap_client_id and od.abonent_group_id = ag.id and
ct.id = od.new_connect_type_id and
si.siebel_user_name = empl.siebel_user_name(+) and
empl.portal_department_id = prtd.id(+) and a.id = od.abonent_id and
r.id = t.region_id and t.id = a.town_id and
dg.id = od.device_group_id and ac.id = od.action_id and
sap.note in
('AFL10', 'AFL20', 'AFL30', 'UD10', 'UD20', 'UD30', 'UKO10', 'UKO20',
'UKO30', 'FRN102', 'FRN202', 'FRN302') and pr.id = od.priority_id and
pr.id != 2 and rd.id = &p_report_date_id

-------Изменения только ЗДЕСЬ-------
and od.end_sysdate between rd.from_date and rd.to_date-- Первый Запрос
-- and od.begin_sysdate between rd.from_date and rd.to_date // Второй Запрос. Изменяется только эти 2строки
-- and od.end_sysdate is null //и добавляется is null и Комментируем Первый Запрос(только строку)
group by cs.id,si.siebel_user_name,t.region_id, r.name, prtd.name, empl.lfm,a.id
22 янв 19, 15:38    [21791280]     Ответить | Цитировать Сообщить модератору
 Re: обьединить 2 запроса в один  [new]
1dva3
Member

Откуда:
Сообщений: 35
в итоге нужно 40 столбцов)))) В одной таблице
22 янв 19, 15:39    [21791281]     Ответить | Цитировать Сообщить модератору
 Re: обьединить 2 запроса в один  [new]
Щукина Анна
Member

Откуда:
Сообщений: 1489
1dva3,

все повторяющие условия свести в едино. отличающиеся - через CASE разделить на две группы.
"разворот" столбцов в две группы по 20 штук делать при помощи
1) PIVOT
2) бородатым способом на всё том же CASE/DECODE

Как вариант, если обе выборки можно однозначно перенумеровать, то перенумеровать и соединить фуллджойном по столбцу-нумератору
22 янв 19, 17:01    [21791374]     Ответить | Цитировать Сообщить модератору
 Re: обьединить 2 запроса в один  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2785
1dva3,

1)
... and
(od.end_sysdate between rd.from_date and rd.to_date-- Первый Запрос
OR
( and od.begin_sysdate between rd.from_date and rd.to_date // Второй Запрос. Изменяется только эти 2строки
and od.end_sysdate is null //и добавляется is null и Комментируем Первый Запрос(только строку)
)

2) добавить в каждую групповую ф-цію
case when (od.end_sysdate between rd.from_date and rd.to_date) then ххх1-20 end -- 20полей групповых ф-ций первого запроса
case when (od.begin_sysdate between rd.from_date and rd.to_date and od.end_sysdate is null ) then yyy21-40 end -- для второго


зы
что-то Вы не договариваете, сдесь явно меньше 20 полей с учетом наличия group by

.....
stax
22 янв 19, 18:33    [21791456]     Ответить | Цитировать Сообщить модератору
 Re: обьединить 2 запроса в один  [new]
1dva3
Member

Откуда:
Сообщений: 35
Спасибо
23 янв 19, 07:27    [21791732]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить