0
votes

Comment rejoindre deux tables et créer une colonne supplémentaire avec des valeurs séparées par des virgules?

Je n'ai pas beaucoup d'expérience avec SQL à part des requêtes de CRUD; S'il vous plaît, pardonnez-moi si cela est trivial. J'essaie de rejoindre deux tables et de créer une colonne supplémentaire dans les résultats avec une série de valeurs séparées de virgule.

Tableau 1

 Entrez la description de l'image ici

Tableau 2

Entrez l'image Description ici

Je peux obtenir le Valeurs séparées des virgules du tableau 2 en utilisant xxx

Entrez la description de l'image ici

Je ne peux pas comprendre comment Joignez-vous aux tables ensemble sur le Typeid pour contenir un ensemble de résultats contenant la colonne de matérielsRreguiired .


0 commentaires

3 Réponses :


0
votes

Sous la version SQL Server 2016, vous pouvez utiliser un chemin XML sur le groupe par chaîne Concat xxx

sur la version SQL Server 2016, vous pouvez utiliser string_agg . .

string_agg (transact-sql) - SQL Server | Microsoft Docs


0 commentaires

1
votes

Vous pouvez rejoindre, agréger et utiliser la fonction globale string_agg () code> pour générer la liste séparée des virgules. Cette fonction est disponible depuis SQL Server 2017.

select 
    t1.typeID, 
    t1.activityID,
    t1.activityName,
    t.Blueprint,
    t1.productTypeID,
    t1.ProductName,
    string_agg(t2.materialTypeID, ',') 
        within group (order by t2.materialTypeID) materialTypeIDs
from 
    table1 t1
    inner join table2 t2
        on  t2.typeID = t1.typeID
        and t2.activityID = t1.activityID
group by
    t1.typeID, 
    t1.activityID,
    t1.activityName,
    t.Blueprint,
    t1.productTypeID,
    t1.ProductName


0 commentaires

0
votes

En tant que note, quelle que soit l'approche, vous pouvez trouver une sous-requête corrélée plus simple qu'une grosse agrégation: xxx

ou: xxx > En général, éviter l'agrégation extérieure améliore les performances, surtout s'il y a un index sur Table2 (typeid, activité) .


1 commentaires

Merci Gordon. Je vais essayer votre Apporach aussi.