Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Объединение 2х запросов использующих PIVOT в один / 4 сообщений из 4, страница 1 из 1
22.08.2018, 10:54
    #39691558
fastchsa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение 2х запросов использующих PIVOT в один
Доброго времени суток, имею 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
22.08.2018, 16:38
    #39691917
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение 2х запросов использующих PIVOT в один
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
23.08.2018, 06:53
    #39692112
fastchsa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение 2х запросов использующих PIVOT в один
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
23.08.2018, 12:34
    #39692342
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение 2х запросов использующих PIVOT в один
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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Объединение 2х запросов использующих PIVOT в один / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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