SQL-запрос для удаления зависимого столбца с помощью оракула - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь повторить приведенный ниже сценарий, используя oracle sql запрос:

enter image description here

У меня естьсделал ли это с помощью запроса на объединение, но в этом запросе я нажимаю одну и ту же таблицу несколько раз, есть ли альтернатива для этого запроса?

Обратите внимание: col и val зависят друг от друга аналогичноcol_1 и val_1 также зависят друг от друга

select id,col, val from tbl
union
select id,col_1, val_1 from tbl

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Вы можете поворачивать и отменять несколько столбцов с помощью операторов PIVOT и UNPIVOT, вам просто нужно знать правильный синтаксис.В вашем случае вы хотите UNPIVOT.Вы теряете некоторую информацию в том, как вы показываете желаемый результат, и, возможно, это нормально для ваших нужд;в любом случае ниже я включаю столбец, который показывает порядок пар столбцов.(Немного странно, показывая 1 для COL/VAL и 2 для COL_1/VAL_1, но я все равно предполагаю, что это не ваши настоящие имена столбцов.) Если вам не нужен столбец ORD в выходных данныхпросто удалите его из предложения SELECT.

Примечание - COLUMN является зарезервированным словом Oracle, оно не может быть именем столбца.Я изменил имена столбцов на C и V в выводе.

with
  input(id, col, col_1, val, val_1) as (
    select 1, 'ABC', 'DEF', 10, 20 from dual union all
    select 2, 'GHI', 'JKL', 30, 40 from dual
  )
select  id, ord, c, v
from    input
unpivot ( (c, v) for ord in ((col, val) as 1, (col_1, val_1) as 2))
;

        ID        ORD C            V
---------- ---------- --- ----------
         1          1 ABC         10
         1          2 DEF         20
         2          1 GHI         30
         2          2 JKL         40
0 голосов
/ 06 декабря 2018

Oracle 12C + поддерживает боковые объединения, поэтому вы можете сделать:

select t.id, v.col, v.val
from tbl t cross join lateral
     (select t.col, t.val from dual union all
      select t.col_1, t.val from dual
     ) v;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...