Pergunta

Eu tenho dados que se parece com

CUSTOMER,  CUSTOMER_ID, PRODUCT
ABC INC    1            XYX
ABC INC    1            ZZZ
DEF CO     2            XYX
DEF CO     2            ZZZ
DEF CO     2            WWW
GHI LLC    3            ZYX

Eu gostaria de escrever uma consulta que faria o olhar de dados como este:

CUSTOMER, CUSTOMER_ID, PRODUCTS
ABC INC   1            XYX, ZZZ
DEF CO    2            XYX, ZZZ, WWW
GHI LLC   3            ZYX

Usando o Oracle 10g se ajuda. Eu vi algo que iria trabalhar usando o MySQL, mas eu preciso de um SQL simples ou ORACLE equivalente. Eu também vi exemplos de procedimentos armazenados que poderiam ser feitas, no entanto, eu não posso usar um proc armazenados com o produto que estou usando.

Aqui está Como foi trabalhar em MySQL se eu fosse usá-lo

SELECT CUSTOMER, 
       CUSTOMER_ID, 
       GROUP_CONCAT( PRODUCT ) 
FROM MAGIC_TABLE 
GROUP BY CUSTOMER, CUSTOMER_ID

Obrigado.

Foi útil?

Solução

Este link refere-se a uma série de exemplos de formas diferentes para fazer isso em Oracle. Veja se há algo lá que você tem permissões em seu banco de dados para fazer.

Outras dicas

Eu acho LISTAGG é o melhor grupo agregado pela função para uso nesta situação:

  SELECT CUSTOMER, CUSTOMER_ID,
         LISTAGG(PRODUCT, ', ') WITHIN GROUP (ORDER BY PRODUCT)
    FROM SOME_TABLE
GROUP BY CUSTOMER, CUSTOMER_ID
ORDER BY 1, 2

A função de usuário oracle 'wm_concat' funciona da mesma maneira como LISTAGG exceto que você não pode especificar um delimitador '' por padrão ou uma ordem de classificação. No entanto, é compatível com 10g.

Graças Nigel,

My SQL não é tão elegante como poderia ser, mas eu precisava de uma solução que exigiu SQL apenas, não PLSQL ou TSQL, por isso acabou por olhar como esta:

SELECT   CUSTOMER, CUSTOMER_ID, COUNT(PRODUCT) PROD_COUNT, 
         RTRIM( 
            XMLAGG( XMLELEMENT (C, PRODUCT || ',') ORDER BY PRODUCT
).EXTRACT ('//text()'), ',' 
         ) AS PRODUCTS FROM     (
         SELECT   DISTINCT CUSTOMER, CUSTOMER_ID, PRODUCT
         FROM     MAGIC_TABLE
         ) GROUP BY CUSTOMER, CUSTOMER_ID ORDER BY 1 , 2

Ainda não sei exatamente o que as funções XML fazer exatamente, mas eu vou cavar quando o arrises necessidade.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top