Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Расположить столбцы в строку. / 7 сообщений из 7, страница 1 из 1
14.05.2018, 21:48
    #39644660
rigor mortis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расположить столбцы в строку.
Привет,
что-то затруднился. Есть таблица

type val date A 1 01.05.2018B 2 01.05.2018C 3 01.05.2018D 4 01.05.2018A 7 02.05.2018C 8 02.05.2018D 9 02.05.2018

нужно сгруппировать по дате и сделать так чтобы первая строка каждой группы содержала столбцы со значениями каждого type, то есть:
A B C D date1234 01.05.2018789 02.05.2018
Если val какого-то из типов пропущен то null.
Я что-то не могу сообразить. Вроде pivot здесь не прикрутить, тогда как?
...
Рейтинг: 0 / 0
14.05.2018, 22:11
    #39644665
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расположить столбцы в строку.
rigor mortisроде pivot здесь не прикрутить, тогда как?
Мсье решил типа толсто потроллить?
Если нет, то используйте pivot и не морочьте людям голову.
...
Рейтинг: 0 / 0
14.05.2018, 23:55
    #39644700
rigor mortis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расположить столбцы в строку.
andrey_anonymous, и как здесь использовать privot? У меня здесь две строки должно быть, а pivot даст одну с агрегированными значениями полей.

Код: plsql
1.
2.
3.
select * from 
(select t.type, t.val from table t)
pivot (max(val) for type in ('A', 'B', 'C', 'D'))


(max(val) либо другая функция, без неё pivot не работает)

Результат:
ABCD7289
...
Рейтинг: 0 / 0
15.05.2018, 10:31
    #39644800
efendi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расположить столбцы в строку.
rigor mortis,

А если так попробовать

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
WITH t AS
( SELECT 'A' typ, 1 val, to_date('01.05.2018', 'DD.MM.YYYY') dat FROM dual UNION ALL
 SELECT 'B' typ, 2 val, to_date('01.05.2018', 'DD.MM.YYYY') dat FROM dual UNION ALL
 SELECT 'C' typ, 3 val, to_date('01.05.2018', 'DD.MM.YYYY') dat FROM dual UNION ALL
 SELECT 'D' typ, 4 val, to_date('01.05.2018', 'DD.MM.YYYY') dat FROM dual UNION ALL
 SELECT 'A' typ, 7 val, to_date('02.05.2018', 'DD.MM.YYYY') dat FROM dual UNION ALL
 SELECT 'C' typ, 8 val, to_date('02.05.2018', 'DD.MM.YYYY') dat FROM dual UNION ALL
 SELECT 'D' typ, 9 val, to_date('02.05.2018', 'DD.MM.YYYY') dat FROM dual 
)
select * from 
(select t.typ, t.val, t.dat from t)
pivot (min(val) for typ in ('A', 'B', 'C', 'D'))
...
Рейтинг: 0 / 0
15.05.2018, 11:50
    #39644868
merch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расположить столбцы в строку.
rigor mortisВроде pivot здесь не прикрутить, тогда как?


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
with t(a, b, dt) as
(
select 'A', 	1, 	'01.05.2018' from dual union all
select 'B', 	2, 	'01.05.2018' from dual union all
select 'C', 	3, 	'01.05.2018' from dual union all
select 'D', 	4, 	'01.05.2018' from dual union all
select 'A', 	7, 	'02.05.2018' from dual union all
select 'C', 	8, 	'02.05.2018' from dual union all
select 'D', 	9, 	'02.05.2018' from dual
)
select
  max(decode(a, 'A', b)) as "A",
  max(decode(a, 'B', b)) as "B",
  max(decode(a, 'C', b)) as "C",
  max(decode(a, 'D', b)) as "D",
  dt
from t
group by dt
order by dt;




A B C D DT1 2 3 4 01.05.20187 8 9 02.05.2018
...
Рейтинг: 0 / 0
15.05.2018, 11:51
    #39644869
merch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расположить столбцы в строку.
merch,

+ to_date.
...
Рейтинг: 0 / 0
15.05.2018, 14:50
    #39645038
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расположить столбцы в строку.
rigor mortisandrey_anonymous, и как здесь использовать privot? У меня здесь две строки должно быть, а pivot даст одну с агрегированными значениями полей.

Как в учебнике написано, так и использовать:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
SQL> with t (type,  val, dt) as (
  2  select 'A', 1, to_date('01.05.2018','dd.mm.yyyy')
  3  from dual union all select 'B', 2, to_date('01.05.2018','dd.mm.yyyy')
  4  from dual union all select 'C', 3, to_date('01.05.2018','dd.mm.yyyy')
  5  from dual union all select 'D', 4, to_date('01.05.2018','dd.mm.yyyy')
  6  from dual union all select 'A', 7, to_date('02.05.2018','dd.mm.yyyy')
  7  from dual union all select 'C', 8, to_date('02.05.2018','dd.mm.yyyy')
  8  from dual union all select 'D', 9, to_date('02.05.2018','dd.mm.yyyy')
  9  from dual)
--------------------------------------------------------------------------------
 10  select A_V A, B_V B, C_V C, D_V D, dt "DATE"
 11    from t
 12  pivot (max(val) as v
 13  for type in ( 'A' A, 'B' B, 'C' C, 'D' D )
 14  )
 15  order by dt
 16  ;
         A          B          C          D DATE
---------- ---------- ---------- ---------- -----------
         1          2          3          4 01.05.2018
         7                     8          9 02.05.2018

SQL> 
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Расположить столбцы в строку. / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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