Список Oracle sql на основе другого столбца

Я новичок в Oracle SQL, и мне нужно решить задачу, как показано ниже.

Я прикрепил изображение здесь, и что мне нужно сделать прямо сейчас, так это использовать SQL, чтобы показать результат, как правую сторону, так и левую..

Мне нужно перечислить столбец 2 (C2) и столбец 3 (C3) на основе столбца 1 (C1)
Если C2 и C3 получили только одну запись и нет повторяющихся записей,
тогда результат будет выглядеть так: первая строка: 4316, оранжевый грузоотправитель 1, Гонконг, Китай.
Однако есть некоторые сложные случаи, такие как 4343/4403/4406 в C1.

C2 может иметь дублированные записи, но C3 нет. есть, наоборот.

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

SELECT t1.number AS C1,
       t2.shipper AS C2,
       rank() over (partition BY t2.shipper
                    ORDER BY t1.number) AS rank_over_c2,
       t2.venue AS C3,
       rank() over (partition BY t2.venue
                    ORDER BY t1.number) AS rank_over_c3
FROM table1 t1,
     table2 t2

Но после этого я понятия не имею, как я могу получить результат, как правая сторона на прикрепленном изображении.

Изображение находится здесь:
Слева — исходные столбцы и данные, я хотел бы получить результат, как правая сторона


person appletabo    schedule 20.03.2016    source источник
comment
Ваш вопрос кажется неструктурированным. Пожалуйста, обратитесь к stackoverflow.com/help/how-to-ask, чтобы узнать, как задать вопрос, на который можно легко ответить. .   -  person F43nd1r    schedule 20.03.2016


Ответы (1)


Пытаться:

SELECT * FROM 
(
   SELECT c1, listagg( c2, ', ' ) within group ( order by c2 ) as C2
   FROM ( select distinct c1, c2 from c1c2 )
   Group by c1
) x 
JOIN (
   SELECT c1, listagg( c3, ', ' ) within group ( order by c3 ) as C3
   FROM ( select distinct c1, c3 from c1c2 )
   Group by c1
) y
using( c1 )
person krokodilko    schedule 20.03.2016