Cómo agrupar los campos BYC y CONCATENAR en desplazamiento al rojo

Cómo agrupar los campos BYC y CONCATENAR en desplazamiento al rojo, por ejemplo, si tengo tabla

ID COMPANY_ID EMPLOYEE 1 1 Anna 2 1 Bill 3 2 Carol 4 2 Dave 

¿Cómo puedo get un resultado como este?

 COMPANY_ID EMPLOYEE 1 Anna, Bill 2 Carol, Dave 

Hay algunas soluciones PostgreSQL , pero ninguna de las funciones mencionadas en las respuestas están disponibles en Redshift righnow.

Bueno, llegué un poco tarde, pero el anuncio sobre esta function se realizó el 3 de agosto de 2015. Redshift ha introducido la function de window LISTAGG que permite hacerlo ahora. Aquí hay una solución rápida a su problema: puede o no ser útil, pero ponerlo aquí para que las personas lo sepan.

 SELECT COMPANY_ID, LISTAGG(EMPLOYEE,', ') WITHIN GROUP (ORDER BY EMPLOYEE) OVER (PARTITION BY COMPANY_ID) AS EMPLOYEE FROM YOUR_TABLE ORDER BY COMPANY_ID 

Me alegré de ver esta característica, y muchos de nuestros scripts de producción están listos para actualizarse con todas las nuevas características que Redshift sigue agregando.

Aquí está la documentation sobre la function

Parece que no hay una forma directa de resolver esto. Esto es lo que hice para resolverlo, esta solución solo funciona cuando se sabe cuántas veces se repite un grupo a campo, por ejemplo, en el caso anterior es 2, ya que company_id se repite dos veces. En mi caso, sé este conteo así que esta solución me funciona, aunque no es muy elegante

Si el grupo por recuento es 2

 select e1.company_id, e1.name || e2.name from employee e1, employee e2 where e1.company_id = e2.company_id and e1.id < e2.id; 

Si el grupo por conteo es 3

 select e1.company_id, e1.name || e2.name || e3.name from employee e1, employee e2, employee e3 where e1.company_id = e2.company_id and e1.company_id = e2.company_id and e1.id < e2.id and e2.id < e3.id;