Конвертировать строки в столбцы в Oracle 11g - PullRequest
0 голосов
/ 18 января 2019

У меня есть таблица с двумя столбцами (имя и пол). В моей таблице 4 записи.

Name  Gender
A       Male
B       Female
C       Male
D       Female

Я хотел бы написать SQL-запрос для преобразования вышеуказанных данных в формат ниже.

Male      Female
A           B    
C           D

Ответы [ 3 ]

0 голосов
/ 18 января 2019

Вот один вариант с использованием CTE:

WITH male AS (
    SELECT Name, ROW_NUMBER() OVER (ORDER BY Name) rn
    FROM yourTable
    WHERE Gender = 'Male'
),
female AS (
    SELECT Name, ROW_NUMBER() OVER (ORDER BY Name) rn
    FROM yourTable
    WHERE Gender = 'Female'
)

SELECT m.Name AS Male, f.Name AS Female
FROM male m
INNER JOIN female f
    ON m.rn = f.rn;

Демо

0 голосов
/ 18 января 2019

Другая возможность, аналогичная Тиму, но требует только одного CTE:

with numbered as (
   select name, gender, row_number() over (partition by gender order by name) as rn
   from the_table
)
select f.name as "Female", m.name as "Male"
from numbered f 
  full outer join numbered m on m.rn = f.rn and m.gender = 'Male'
where f.gender = 'Female';

При использовании полного внешнего объединения это также работает, если количество строк для каждого пола различно.

Онлайн пример

0 голосов
/ 18 января 2019

Это может быть так просто:

SELECT m.Name Male, f.Name Female
FROM t m, t f
WHERE m.Gender = "Male" AND f.Gender = "Female";

Но это не имеет особого смысла, надеюсь, вы знаете, что делаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...