Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как собрать таблицу из названий колонок и их значений? / 8 сообщений из 8, страница 1 из 1
04.12.2019, 14:20
    #39898099
rpaa1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как собрать таблицу из названий колонок и их значений?
Всем привет.

Подскажите пожалуйста. Есть такое задание:
Есть таблица TableA, которая состоит из нескольких полей Column1, Column2, Column3 и т.д.
Мне нужно из нее собрать таблицу, которая будет состоять из 2-ух столбцов и содержать данные:
Название столбца из TableA и значение этого столбца.

Например, есть таблица

Column1Column2Column3Value 1_1Value 2_1Value3_1Value 1_2Value 2_2Value3_2Value 1_3Value 2_3Value3_3

Результат должен быть таким:

Column1NTableColumn2NTableColumn1Value 1_2Column1Value 1_2Column1Value 1_3Column2Value 2_1Column2Value 2_2Column2Value 2_3Column3Value 3_1Column3Value 3_2Column3Value 3_3

В голову не приходит ничего, кроме как выбирать данные по одной колонки и делать UNION, типа так

Код: plsql
1.
2.
3.
4.
5.
6.
select 'Column1', Column1 from TableA
union
select 'Column2', Column2 from TableA
union
select 'Column3', Column3 from TableA
....



Надеюсь понятно написал.

Заранее спасибо.
...
Рейтинг: 0 / 0
04.12.2019, 14:31
    #39898109
MazoHist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как собрать таблицу из названий колонок и их значений?
rpaa1,
авторВ голову не приходит ничего, кроме как выбирать данные по одной колонки и делать UNION, типа так
Cобственно, до появления UNPIVOT так и делали. Ну а где его нет (версия < 11) - делают до сих пор.
...
Рейтинг: 0 / 0
04.12.2019, 14:38
    #39898111
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как собрать таблицу из названий колонок и их значений?
Код: 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.
with t (Column1,Column2,Column3)
  as (
      select 'Value 1_1','Value 2_1','Value 3_1' from dual union all
      select 'Value 1_2','Value 2_2','Value 3_2' from dual union all
      select 'Value 1_3','Value 2_3','Value 3_3' from dual
     )
select  *
  from  t
  unpivot(
          Column2NTable for Column1NTable in (
                                              Column1 as 'Column1',
                                              Column2 as 'Column2',
                                              Column3 as 'Column3'
                                             )
         )
/

COLUMN1NTABLE COLUMN2NTABLE
------------- -------------
Column1       Value 1_1
Column2       Value 2_1
Column3       Value 3_1
Column1       Value 1_2
Column2       Value 2_2
Column3       Value 3_2
Column1       Value 1_3
Column2       Value 2_3
Column3       Value 3_3

9 rows selected.

SQL> 



SY.
...
Рейтинг: 0 / 0
04.12.2019, 14:38
    #39898112
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как собрать таблицу из названий колонок и их значений?
MazoHist

Cобственно, до появления UNPIVOT так и делали. Ну а где его нет (версия < 11) - делают до сих пор.
Даже если закрыть глаза на лишний distinct в плане, то многократное сканирование все равно делает такой подход не самым привлекательным.
...
Рейтинг: 0 / 0
04.12.2019, 17:33
    #39898252
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как собрать таблицу из названий колонок и их значений?
rpaa1
В голову не приходит

Стимуляции воображения ради:
Код: 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.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
with t(Column1,Column2,Column3) as (
select 'Value 1_1', 'Value 2_1', 'Value3_1'
from dual union all select 'Value 1_2', 'Value 2_2', 'Value3_2'
from dual union all select 'Value 1_3', 'Value 2_3', 'Value3_3'
from dual )
select decode(d.r, 1, 'Column1', 2, 'Column2', 3, 'Column3') Column1NTable
     , decode(d.r, 1,  Column1 , 2,  Column2 , 3,  Column3 ) Column2NTable
  from t, (select rownum r from dual connect by level <=3) d
;

with t as (select 'Value 1_1' Column1, 'Value 2_1' Column2, 'Value3_1' Column3
          from dual union all select 'Value 1_2', 'Value 2_2', 'Value3_2'
          from dual union all select 'Value 1_3', 'Value 2_3', 'Value3_3'
          from dual )
select decode(grouping_id(column1, column2,column3)
             , 3, 'Column1'
             , 5, 'Column2'
             , 6, 'Column3'
             ) Column1NTable
     , coalesce(column1, column2,column3) Column2NTable
  from t
group by grouping sets(Column1, Column2, Column3)
;

with t as (select 'Value 1_1' Column1, 'Value 2_1' Column2, 'Value3_1' Column3
          from dual union all select 'Value 1_2', 'Value 2_2', 'Value3_2'
          from dual union all select 'Value 1_3', 'Value 2_3', 'Value3_3'
          from dual )
select decode(grouping_id(column1, column2,column3)
             , 3, 'Column1'
             , 5, 'Column2'
             , 6, 'Column3'
             ) Column1NTable
     , coalesce(column1, column2,column3) Column2NTable
  from t
group by cube(Column1, Column2, Column3)
having grouping_id(column1, column2,column3) in (3,5,6)
;

with t as (select 'Value 1_1' Column1, 'Value 2_1' Column2, 'Value3_1' Column3
          from dual union all select 'Value 1_2', 'Value 2_2', 'Value3_2'
          from dual union all select 'Value 1_3', 'Value 2_3', 'Value3_3'
          from dual )
select column1 Column1NTable, column2 Column2NTable 
  from t
 model
 partition by (column1 c1, column2 c2, column3 c3)
 dimension by (1 n)
 measures(column1, column2, column3)
 rules( column2[3] = column3[1], column1[3] = 'Column3'
      , column2[2] = column2[1], column1[2] = 'Column2'
      , column2[1] = column1[1], column1[1] = 'Column1'
      ) 
;

...
Рейтинг: 0 / 0
04.12.2019, 19:18
    #39898294
rpaa1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как собрать таблицу из названий колонок и их значений?
Всем спасибо. Решил сделать через unpivot. Про него что-то совсем забыл)
...
Рейтинг: 0 / 0
05.12.2019, 10:56
    #39898460
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как собрать таблицу из названий колонок и их значений?
andrey_anonymous
rpaa1
В голову не приходит

Стимуляции воображения ради:

Код: 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.
SQL> ed
Wrote file afiedt.buf

  1  with t as (select 'Value 1_1' Column1, 'Value 2_1' Column2, 'Value3_1' Column3
  2            from dual union all select 'Value 1_2', 'Value 2_2', 'Value3_2'
  3            from dual union all select 'Value 1_2', 'Value 2_3', 'Value3_3'
  4            from dual )
  5  select decode(grouping_id(column1, column2,column3)
  6               , 3, 'Column1'
  7               , 5, 'Column2'
  8               , 6, 'Column3'
  9               ) Column1NTable
 10       , coalesce(column1, column2,column3) Column2NTable
 11    from t
 12* group by grouping sets(Column1, Column2, Column3)
 13  /

COLUMN1 COLUMN2NT
------- ---------
Column1 Value 1_1
Column1 Value 1_2
Column2 Value 2_1
Column2 Value 2_2
Column2 Value 2_3
Column3 Value3_2
Column3 Value3_3
Column3 Value3_1

8 rows selected.
...
Рейтинг: 0 / 0
09.12.2019, 17:49
    #39900305
Zloxa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как собрать таблицу из названий колонок и их значений?
andrey_anonymous

Стимуляции воображения ради:

раз уж зашла речь за модель, без xml стимуляция кажется не полной
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select
    t.*
from 
    xmltable
    (
        'ROWSET/ROW/*'
        passing dbms_xmlgen.getXMLType('select * from user_objects')
        columns 
            name  varchar2(4000) path 'name()',
            value varchar2(4000) path 'text()'
    ) t;


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


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