Sql Sélectionner d'une autre table (boucle?)

Mes compétences SQL ne sont pas géniales d'où le post.

J'essaie d'get tous les noms de contact basés sur une entreprise.

Par exemple, j'ai deux déclarations:

Select Id, CompanyName, Address From Clients Select ClientId, ContactName From Contacts 

Vous pouvez avoir de nombreux contacts avec un seul client

Résultat: (J'ai besoin de tous les noms de contacts dans une seule colonne)

 ContactName Company Address ---------------------------------------- Johh, Steve 123 Comp 12345 Address David,Mike, Sarah 44 Comp 111 Address 

Un exemple de travail serait très apprécié.

 SELECT DISTINCT ( SELECT ISNULL(ct.ContactName, '') + ', ' FROM dbo.Clients cl JOIN dbo.Contacts ct ON cl.Id = ct.ClientId WHERE cl.ID = cl2.Id FOR XML PATH('')) AS ContactName, CAST(cl2.Id AS nvarchar(7)) + ' ' + cl2.CompanyName AS Company, Address FROM dbo.Clients cl2 ORDER BY 2 

Démo sur SQLFiddle

Construisez d'abord tous les noms de contact d'une entreprise dans une seule colonne. En supposant que la database soit SQL Server, j'utilise une expression de table commune pour stocker la list de contacts à colonne unique. Une fois le file CTE créé, joignez-le à la table Clients pour get les noms de contact. FOR XML est utilisé pour concaténer les lignes.

 WITH CTEContactList(ClientID,ContactNames) AS ( SELECT c1.ClientID, Names = SUBSTRING(( SELECT ', ' + c2.ContactName FROM Contacts c2 WHERE c1.ClientID = c2.ClientID FOR XML PATH ('')),3,8000 )) FROM Contacts c1 GROUP BY c1.ClientID ) SELECT cl.ID, cl.CompanyName, cl.Address, ctelist.ContactNames FROM Clients cl INNER JOIN CTEContactList ctelist ON cl.ID = cteList.ClientID 

On dirait que vous devez faire une table join.

Exemple: deux tables ici

 1. Person 2. Orders 

Question:

 SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons INNER JOIN Orders ON Persons.P_Id = Orders.P_Id ORDER BY Persons.LastName 

Vous n'avez pas spécifié votre SGBD, donc je suppose que PostgreSQL:

 select ssortingng_agg(ct.contactName, ', '), cl.companyname, cl.address from contacts ct join clients cl on cl.id = ct.clientId group by cl.companyname, cl.address