powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Объединение 2х запросов использующих PIVOT в один
4 сообщений из 4, страница 1 из 1
Объединение 2х запросов использующих PIVOT в один
    #39691558
fastchsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток, имею 2 запроса которые нужно объединить, но пока не могу додуматься как. Ниже шаблон таблицы который должен получиться.
object 1010name_1 10 20 30 40
Проблема в том, как прописать "a","b" в блоке PIVOT чтобы не получалась такая картина
object b10name_1 10 20 NULLname_1 10 NULL 30

Краткие шаблоны запросов
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
SELECT * FROM
(
  SELECT t.object, t.operatorid,
   ( ...) as a
  FROM table_name t
)
PIVOT
(
  max(a)
  FOR operatorid IN (1, 0)
)

----------------------------

SELECT * FROM
(
  SELECT t.object, t.operatorid,
   ( ...) as b
  FROM table_name t
)
PIVOT
(
  max(b)
  FOR operatorid IN (1, 0)
)
...
Рейтинг: 0 / 0
Объединение 2х запросов использующих PIVOT в один
    #39691917
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fastchsa,
ничего не понял, кто на чем стоит

Для того чтобы Вам ответили,
не поленитесь сделать testcase:
1) данные лучше в виде with
2) показать запрос который Вы написали
3) что получили, и что хотели получить

Например так (данные разумеется будут Ваши):

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
with tt(object,operatorid, x , y ) as (
select 1, 0, 1, 9 from dual union all
select 2, 1, 2, 8 from dual union all
select 2, 1, 3, 7 from dual union all
select 2, 0, 4, 6 from dual union all
select 2, 1, 5, 5 from dual union all
select 3, 1, 6, 4 from dual union all
select 3, 0, 7, 3 from dual union all
select 3, 0, 8, 2 from dual union all
select 3, 1, 9, 1 from dual
), t(object,operatorid,a,b) as (
 select object,operatorid, x-y,ceil(x*10/y)  from tt
)
select * from (
select object,operatorid, a, b   from t
)
PIVOT ( max(a) FOR operatorid IN (1, 0))
/
...
Рейтинг: 0 / 0
Объединение 2х запросов использующих PIVOT в один
    #39692112
fastchsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vadim Lejnin,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
--Запрос 1
with tt(object,operatorid, x , y ) as (
select 1, 0, 1, 2 from dual union all
select 1, 1, 3, 4 from dual

), t(object,operatorid,a,b) as (
 select object,operatorid, x,y  from tt
)
select * from (
select object,operatorid, a
   from t
)
PIVOT ( max(a) FOR operatorid IN (1, 0))

--Запрос 2
with tt(object,operatorid, x , y ) as (
select 1, 0, 1, 2 from dual union all
select 1, 1, 3, 4 from dual

), t(object,operatorid,a,b) as (
 select object,operatorid, x,y  from tt
)
select * from (
select object,operatorid, b
   from t
)
PIVOT ( max(b) FOR operatorid IN (1, 0))

--Запрос c объединением (появляются NULL значения чего быть не должно)
with tt(object,operatorid, x , y ) as (
select 1, 0, 1, 2 from dual union all
select 1, 1, 3, 4 from dual

), t(object,operatorid,a,b) as (
 select object,operatorid, x,y  from tt
)
select * from (
select object,operatorid,a, b
   from t
)
PIVOT ( max(b) FOR operatorid IN (1, 0))


Результат который получаю
OBJECT A10134 null11null2

Результат который хочу получить
OBJECT 101013142
...
Рейтинг: 0 / 0
Объединение 2х запросов использующих PIVOT в один
    #39692342
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fastchsa,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
with t(object,operatorid, a , b ) as (
select 1, 0, 1, 2 from dual union all
select 1, 1, 3, 4 from dual
)
--select object,operatorid,a,b,max(b) from t group by object,operatorid,a,b
select object,o1_ma, o0_ma, o1_mb, o0_mb from (
select object,operatorid,a, b
   from t
)
PIVOT ( max(a) as ma,max(b) as  mb  FOR operatorid IN (1 as o1, 0 as o0))
;
    OBJECT      O1_MA      O0_MA      O1_MB      O0_MB
---------- ---------- ---------- ---------- ----------
         1          3          1          4          2
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Объединение 2х запросов использующих PIVOT в один
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]