J'ai deux tableaux, le premier est un tableau des entreprises, et le second est un tableau des actionnaires pourrait-on dire. La table des actionnaires peut compter jusqu'à un millier d'actionnaires.

Je dois créer une vue/une autre table qui contient chaque nom d'actionnaire sur une seule colonne de texte avec l'identifiant unique de la société, le nom et le "faux" nom de la société.

Tableau 1 Entreprise :

ID CompanyID Name FantasyName
1          1  A    Company 1
2          2  B    Company 2 
3          3  C    Company 3
4          4  D    Company 4
5          5  E    Company 5
6          6  F    Company 6
7          7  G    Company 7

Tableau 2 Actionnaires :

ID CompanyID Name
 1         1 John 1
 2         1 Peter 2
 3         1 Gabriel Li
 4         2 Raphael 3
 5         2 Anderson 4
 6         2 Michael 6
 7         2 Angelina Jo
 8         3 John 8
 9         4 Beatrice
10         4 Scarlet
11         5 Scarlet
12         5 Logan
13         5 John 1

J'ai essayé de le faire via Linq via C# mais cela n'a pas été assez rapide pour mon objectif, ce tableau contient plus de millions d'entreprises.

Le résultat final ressemblerait à ceci:

Tableau 3 Société et actionnaires :

ID CompanyID Name FantasyName Shareholders
1          1  A    Company 1  John 1,Peter 2,Gabriel Li
2          2  B    Company 2  Raphael 3, Anderson 4,Michael 6,Angelina Jo
3          3  C    Company 3  John 8
4          4  D    Company 4  Beatrice,Scarlet
5          5  E    Company 5  Scarlet,Logan,John 1
...

Tous les actionnaires dans un seul champ TEXTE, avec les informations sur la société qui l'accompagnent.

2
Levi Barrocas 7 oct. 2019 à 18:14

1 réponse

Meilleure réponse

Vous pouvez utiliser l'agrégation et GROUP_CONCAT() :

CREATE VIEW myview AS
SELECT
    c.ID,
    c.CompanyID,
    c.Name,
    c.FantasyName,
    GROUP_CONCAT(s.Name) Shareholders
FROM 
    Company c
    INNER JOIN Shareholders s ON s.CompanyID = c.CompanyID 
GROUP BY
    c.ID,
    c.CompanyID,
    c.Name,
    c.FantasyName
1
GMB 7 oct. 2019 à 15:17