Como recuperar dados de duas colunas no formato A, B no Oracle

Eu tenho duas colunas no database oracle

+---------+---------+ | Column1 | Column2 | +---------+---------+ | A | 1 | | A | 2 | +---------+---------+ 

Eu quero aposentar os dados como eu vou receber dados como resultado

 +---------+---------+ | Column1 | Column2 | +---------+---------+ | A | 1,2 | +---------+---------+ 

Por favor me forneça a solução.

Tim Hall tem uma lista bastante canônica de técnicas de agregação de strings no Oracle .

Qual técnica você usa depende de vários fatores, incluindo a versão do Oracle e se você está procurando por uma solução puramente SQL. Se você estiver usando o Oracle 11.2, eu provavelmente sugeriria usar o LISTAGG

 SELECT column1, listagg( column2, ',' ) WITHIN GROUP( order by column2 ) FROM table_name GROUP BY column1 

Se você estiver usando uma versão anterior do Oracle, supondo que não precise de uma solução puramente SQL, eu geralmente preferiria usar a abordagem de function agregada definida pelo usuário .

Se você tem 10g, então você tem que passar pela function abaixo:

 CREATE OR REPLACE FUNCTION get_comma_separated_value (input_val in number) RETURN VARCHAR2 IS return_text VARCHAR2(10000) := NULL; BEGIN FOR x IN (SELECT col2 FROM table_name WHERE col1 = input_val) LOOP return_text := return_text || ',' || x.col2 ; END LOOP; RETURN LTRIM(return_text, ','); END; / 

Então, você pode fazer como:

 select col1, get_comma_separated_value(col1) from table_name 

Violino aqui

Se você tem o oracle 11g, você pode usar o listagg :

 SELECT col1, LISTAGG(col2, ', ') WITHIN GROUP (ORDER BY col2) "names" FROM table_x GROUP BY col1 

Mexa aqui para Listagg

Para o mysql, vai ser simples:

 SELECT col1, GROUP_CONCAT(col2) FROM table_name GROUP BY col1 

Na minha versão 10 do oracle, ele faz o trabalho:

 SELECT column1, wm_concat( column2) FROM table_name GROUP BY column1 
Intereting Posts