2015-04-18 2 views
1

Объединить значения из одного поля в многоколоночной таблице.Объединить значения из одного поля в многоколоновом столбце Oracle 11g

T1 имеет дублированные значения в нескольких столбцах, а затем не уникальные значения в последнем столбце. Необходимо вернуть уникальные значения из первых 6 столбцов, а затем объединить не уникальные значения в последнем столбце. Col1 является фокальной точкой, поэтому накопление происходит из различных значений в col7. Столбы между ними не имеют большого значения, они могут быть уникальными или не уникальными. Они должны отображаться в возвращаемых значениях.

образец сильно упрощен до реальной проблемы, но дело под рукой, чтобы вернуться col1, все между ними, то сцепить значения, накопленные от col7

CREATE TABLE T1 
    (
    COL1 NUMBER, 
    COL2 NUMBER, 
    COL3 NUMBER, 
    COL4 NUMBER, 
    COL5 NUMBER, 
    COL6 NUMBER, 
    COL7 NUMBER);-- 


INSERT INTO T1 VALUES(1, 2, 3, 4, 5, 6, 7); 
INSERT INTO T1 VALUES(1, 2, 3, 4, 5, 6, 97); 
INSERT INTO T1 VALUES(1, 2, 3, 4, 5, 6, 147); 

Desired results 
    COL1, COL2, COL3,  COL4,  COL5,  COL6,  COL7 
     1 2   3   1   2   3  7, 97,147 

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

Любые предложения и идеи оценены.

+0

функция LISTAGG может помочь вам. – voter

+0

Благодарим вас за ответ. SELECT col1, LISTAGG (col7, '') внутри группы (ORDER BY col1) AS имена FROM ( ВЫБРАТЬ UNIQUE col7, col1 ОТ t1 ) GROUP BY col1 – user761758

+0

Я не могу получить дисплей в формате кода, но он работает и дает мне почти все, что мне нужно. То, что я до сих пор не могу работать, - это добавить столбцы I между 1 и 7. listagg дает мне желаемые результаты для col 1 и col7, но в любом месте я пытаюсь добавить другие столбцы, я получаю сообщение об ошибке .. – user761758

ответ

1

Во-первых, col1 не является первичным ключом, если он имеет повторяющиеся значения в таблице. Вам нужно пересмотреть свое использование терминологии.

Вы можете сделать это с помощью агрегирования:

select col1, col2, col3, col4, col5, col6, 
     listagg(col7, ',') within group (order by col7) as col7s 
from t1 
group by col1, col2, col3, col4, col5, col6; 
+0

Спасибо! Мои извинения .. Я добавил уникальную ценность после того, как все остальное было сделано и не вернулось и не изменило текст. Ваш ответ точен и дает мне именно то, что я ищу .. Спасибо! – user761758