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