2016-06-17 2 views
2

Скажем, у меня есть следующий запрос:SQL запросов с несколькими полями, сплетенных в одну запись

SELECT  KEY, 
      BILL, 
      CODE  
FROM  TABLE1 
INNER JOIN TABLE2 ON TABLE1.KEY = TABLE2.KEY 
ORDER  TABLE1.KEY; 

И это выводит следующую таблицу

KEY | BILL | CODE 
1234 | AAA | ABC 
1234 | AAA | BCD 
1234 | AAA | DEF 

Есть ли способ запроса возвращать запись как : 1234 AAA ABC AAA BCD AAA DEF? Я в основном хочу свернуть каждый вывод для каждой записи, имеющей тот же ключ. Это в Oracle.

+0

почтовых данных для table1 и table2 – Matt

ответ

3

Вы можете сделать это с listagg:

SELECT KEY, 
     LISTAGG(BILL||' '||CODE, ' ') WITHIN GROUP (ORDER BY BILL||' '||CODE)  
    FROM TABLE1 
    INNER JOIN TABLE2 
    ON TABLE1.KEY = TABLE2.KEY 
    ORDER TABLE1.KEY 
GROUP BY KEY 
+0

Я попробовал это, и я в конечном итоге с негабаритной конкатенации. Пробовал преобразовать каждое поле to_clob, и он все еще не прошел. –

+0

Да, вы не можете использовать этот подход для строк размером более 4000 символов. С другой стороны, если у вас такие большие ряды, возможно, вы не должны использовать конкатенацию ... –

Смежные вопросы