Нужна помощь с использованием sql join для преобразования строк в столбцы (Oracle 9i) - PullRequest
2 голосов
/ 06 августа 2010

У меня есть таблица с приблизительно 22 столбцами и 6-7 тысячами строк в следующем формате

Seq_num     unique_id   name  ...   
------------------------------------
1          1           abc                  
1          1           cde      
2          1           lmn          
2          1           opq      
3          1           pqr      
4          1           stu      
1          2           oaq      
2          2           zxq      
3          2           fgw      
3          2           pie      
4          2           tie      

Я пытаюсь преобразовать 4 последовательные последовательности для каждого уникального идентификатора в одну строку. который выглядит как

unique_id   name    ...     name    ...     name    ...     name    ... 
--------------------------------------------------------------------------
1           abc             lmn             pqr             stu
2           oaq             zxq             fgw             tie

Я использую разделение по unique_Id и seq_num вместе с левыми соединениями для достижения этого.

Однако мне нужно получить все данные из таблицы в следующем формате

unique_id   name    ...     name     ...    name    ...     name     ...  
---------------------------------------------------------------------------
1           abc             lmn             pqr             stu
1           cde             opq             pqr             stu
2           oaq             zxq             fgw             tie
2           oaq             zxq             pie             tie

т.е. Мне нужно отобразить уникальный seq_num в другой строке (для данного unique_id), и если какой-либо seq_num отсутствует, используйте общий seq_num (из того же unique_id), чтобы заполнить пробел ..

например,

Поскольку unique_id 2 имеет два seq_num 3 (fgw, pie), unique_id 2 будет иметь две строки, которые выглядят как

2           oaq             zxq             fgw             tie
2           oaq             zxq             pie             tie 

Возможно ли что-то подобное, и если итак, как?

Я использую Oracle 9i.

Спасибо
Р. Пол

Ответы [ 2 ]

0 голосов
/ 13 августа 2010

Не ответ, а просьба о разъяснении.В вашем примере:

1           abc             lmn             pqr             stu
1           cde             opq             pqr             stu

Вы соединяете «abc» с «lmn» в первом ряду и «cde» с «opq» во втором ряду.Является ли следующий набор строк также допустимым «решением»:

1           abc             opq             pqr             stu
1           cde             lmn             pqr             stu

Где «abc» в паре с «opq» в первой строке, а «cde» в паре с «lmn» во второй?

Если это так, я не уверен, как вы можете сказать, что у вас есть правильный набор ответов, так как в данных, по-видимому, нет ничего, что помогло бы вам различить эти два.

0 голосов
/ 06 августа 2010

Итак, вам необходимо заполнить пропущенные пробелы. Следующий фрагмент кода не работает должным образом. Мышление ...

Следующий фрагмент кода является WIP. Это первый шаг при создании полного набора столбцов SEQ_NUM, UNIQUE_ID и NAME, но у меня еще не было возможности его протестировать.

select seq_num
       , unique_id
       , case 
            when name is not null then name 
            else lag (name, 1) 
               over ( partition by unique_id, seq_num 
                      order by nvl2(name, 1, 0)
                    ) end as name
from
    (    
        select t.seq_num
               , y.unique_id
               , y.name
        from ( select 1 as seq_num from dual
               union all
               select 2 as seq_num from dual
               union all
               select 3 as seq_num from dual
               union all
               select 4 as seq_num from dual ) t
        left outer join
             your_table y 
                 on ( t.seq_num = y.seq_num )   
    )

NB. Я мог бы использовать трюк CONNECT BY для генерации чисел, но это было немного странно в 9i (и также было без документов).

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