Сводка от строки к столбцу - Oracle SQL - PullRequest
1 голос
/ 30 апреля 2019

У меня есть таблица:

Table1

row_id     var        var_val
1          Test 1      123
1          Test 2      456
1          Test 3      789
1          Test 4      1234
2          Test 1      665t
2          Test 2      dsfs
2          Test 3      df
2          Test 4      sfd
3          Test 1      sfs
3          Test 2      sf
3          Test 3      sdfs
3          Test 4      sfsd

Вот вывод:

Table2

row_id      var1        var2
1           123         456
2           665t        dsfs
3           sfs         sf
  • Для var1- получить значение, где var = "Test 1"
  • Для var2 - получить значение, где var = "Test 2"

Есть ли способ использовать сводную или какой-либо способ извлеченияпеременная для каждого row_id из таблицы1, как указано выше?

Ответы [ 3 ]

1 голос
/ 30 апреля 2019

Вы можете использовать условное агрегирование или join:

select t11.row_id, t11.var, t12.var
from table1 t11 join
     table1 t12
     on t11.row_id = t12.row_id and
        t11.var = 'Test 1' and
        t12.var = 'Test 2'
0 голосов
/ 30 апреля 2019

Вы можете использовать correlated subqueries и row_number() окно аналитической функции вместе

with table1(row_id, var, var_val) as
(
 select 1,'Test 1','123'  from dual union all
 select 1,'Test 2','456'  from dual union all
 select 1,'Test 3','789'  from dual union all
 select 1,'Test 4','1234' from dual union all
 select 2,'Test 1','665t' from dual union all
 select 2,'Test 2','dsfs' from dual union all
 select 2,'Test 3','df'   from dual union all
 select 2,'Test 4','sfd'  from dual union all
 select 3,'Test 1','sfs'  from dual union all
 select 3,'Test 2','sf'   from dual union all
 select 3,'Test 3','sdfs' from dual union all
 select 3,'Test 4','sfsd' from dual
), t2 as
(
select t.*, row_number() over (partition by var order by row_id) as rn
  from table1 t
)
select distinct row_id,
                (select var_val
                   from table1 t2
                  where t2.var = 'Test 1'
                    and t2.row_id = rn) as var1,
                (select var_val
                   from table1 t2
                  where t2.var = 'Test 2'
                    and t2.row_id = rn) as var2
  from t2
 order by row_id

 ROW_ID VAR1    VAR2
 ------ ----    ----
 1      123     456
 2      665t    dsfs
 3      sfs     sf

Демо

0 голосов
/ 30 апреля 2019

Есть ли способ использовать пивот ...?

Sure:

select * 
  from table1
  pivot (max(var_val) for var in ('Test 1' var1, 'Test 2' var2))

демо

...