powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Расположить столбцы в строку.
7 сообщений из 7, страница 1 из 1
Расположить столбцы в строку.
    #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
Расположить столбцы в строку.
    #39644665
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rigor mortisроде pivot здесь не прикрутить, тогда как?
Мсье решил типа толсто потроллить?
Если нет, то используйте pivot и не морочьте людям голову.
...
Рейтинг: 0 / 0
Расположить столбцы в строку.
    #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
Расположить столбцы в строку.
    #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
Расположить столбцы в строку.
    #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
Расположить столбцы в строку.
    #39644869
merch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
merch,

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


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