La pregunta original fue base de datos específica, pero tal vez este es un buen lugar para incluir una respuesta más genérica. Es una pregunta común. El concepto que está describiendo a menudo se denomina 'Concatenación de grupo'. No hay una solución estándar en SQL-92 o SQL-99. Por lo tanto, necesitará una solución específica del proveedor.
- MySQL - Probablemente la solución más sencilla. Use la función integrada GROUP_CONCAT. En el ejemplo que usted quiere algo como esto:
select
o.ID, o.Address, o.OtherDetails,
GROUP_CONCAT(concat(e.firstname, ' ', e.lastname)) as Employees
from
employees e
inner join organization o on o.org_id=e.org_id
group by o.org_id
- PostgreSQL - EDIT: PostgreSQL 9.0 es igual de sencillo ahora que string_agg (expresión, delimitador) está incorporado. Aquí está con 'comas espacio' entre elementos:
select
o.ID, o.Address, o.OtherDetails,
STRING_AGG((e.firstname || ' ' || e.lastname), ', ') as Employees
from
employees e
inner join organization o on o.org_id=e.org_id
group by o.org_id
PostgreSQL antes de 9.0 permite definir sus propias funciones de agregado con CREATE agregado. Un poco más de trabajo que MySQL, pero mucho más flexible. Vea esto other post para más detalles. (Por supuesto PostgreSQL 9.0 y más tarde tener esta opción.)
- & Oracle MS SQL Server - Crear un procedimiento almacenado que toma la ORG_ID como su entrada y salida a los nombres de los empleados concatenados. Luego use este procedimiento almacenado en su consulta. Algunas de las otras respuestas aquí incluyen algunos detalles sobre cómo escribir procedimientos almacenados como estos.
select
o.ID, o.Address, o.OtherDetails,
MY_CUSTOM_GROUP_CONCAT_PROCEDURE(o.ID) as Employees
from
organization o
- Otras tecnologías DBMS - La ruta de procedimiento almacenado es la más probable. Quizás otros puedan actualizar esta respuesta con respuestas más específicas de la tecnología.
Por supuesto, tan pronto como el total de todos los nombres de los empleados, más comas y espacios alcanzan 8000 - ¡tienes un problema! – Valerion