powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / unpivot
5 сообщений из 5, страница 1 из 1
unpivot
    #39714841
ffzx1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В наличии есть строка:
Код: plsql
1.
select 1 as id, 10 as num1, 11 as num2, 12 as num3, 'p' as str1, 's' as str2, date '2018-01-01' as dt1 from dual


Необходимо привести к следующему виду:
Код: plsql
1.
2.
3.
4.
5.
6.
1	NUM1	10    	Null	Null
1	NUM2	11    	Null	Null
1	NUM3	12    	Null	Null
1	STR1	Null	p     	Null
1	STR2	Null	s     	Null
1	DT1 	Null	Null	01.01.2018


Ничего умнее, чем тройной unpivot с union all не придумал:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
with t as (
select 1 as id, 10 as num1, 11 as num2, 12 as num3, 'p' as str1, 's' as str2, date '2018-01-01' as dt1 from dual
)
select id, grp, num_val, to_char(null) as str_val, to_date(null) as dt_val from t unpivot (num_val for grp in (NUM1, NUM2, NUM3))
union all
select id, grp, null, str_val, null from t unpivot (str_val for grp in (STR1, STR2))
union all
select id, grp, null, null, dt_val from t unpivot (dt_val for grp in (DT1))



Есть ли варианты покрасивше?
...
Рейтинг: 0 / 0
unpivot
    #39714849
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ffzx1,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SQL> l
  1  select
  2    id
  3   ,decode(u.p,1,'num1',2,'num2',3,'num3',4,'str1',5,'str2',6,'dt1') gr
  4   ,decode(u.p,1,num1,2,num2,3,num3) u1
  5   ,decode(u.p,4,str1,5,str2) u2
  6   ,decode(u.p,6,dt1) u3
  7  from (select 1 as id, 10 as num1, 11 as num2, 12 as num3, 'p' as str1, 's' as str2, date '2018-01-01' as dt1 from dual) t
  8* ,(select level p from dual connect by level<7) u
SQL> /

        ID GR           U1 U2   U3
---------- ---- ---------- ---- --------
         1 num1         10 null null
         1 num2         11 null null
         1 num3         12 null null
         1 str1 null       p    null
         1 str2 null       s    null
         1 dt1  null       null 01.01.18

6 rows selected.



обычный ручной унпивот

.....
stax
...
Рейтинг: 0 / 0
unpivot
    #39714856
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ffzx1,

добавь подзапрос с null-колонкой и распиши комбинированные комбинации в unpivot-что и в unpivot-где.
...
Рейтинг: 0 / 0
unpivot
    #39714860
ffzx1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-ffzx1,

добавь подзапрос с null-колонкой и распиши комбинированные комбинации в unpivot-что и в unpivot-где.

Если честно, не догнал. Можете носом в пример ткнуть, если не трудно?
...
Рейтинг: 0 / 0
unpivot
    #39714866
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select *
from (select t.*, null пи11 from t) t1
unpivot ((numval, strval, datval) for grp   in (
         (  num1,   пи11,   пи11) as 'NUM1',
         (  num2,   пи11,   пи11) as 'NUM2',
         (  num3,   пи11,   пи11) as 'NUM3',
         (  пи11,   str1,   пи11) as 'STR1',
         (  пи11,   str2,   пи11) as 'STR2',
         (  пи11,   пи11,    dt1) as 'DT1'
        ))
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / unpivot
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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