Tout d'abord, j'ai regardé cela , et ma question est différente – quoique légèrement. J'ai aussi essayé l'approche et j'ai essayé de la modifier pour qu'elle fonctionne pour moi, mais pas de dés.
Question:
À partir d'un résultat de quelques requêtes, j'obtiens le résultat suivant:
ID | NAME | DESCID | TALL | GOODLOOKING | FAT _______________________________________________________________ 1 | John | 1 | '1.8m' | Null | Null 1 | John | 2 | Null | 'Yes' | Null 1 | John | 3 | Null | Null | '84kg' 1 | John | 4 | Null | Null | '85kg'
Note: Juste quelques données fictives BTW.
J'ai besoin que la sortie soit la suivante:
ID | NAME | TALL | GOODLOOKING | FAT __________________________________________________________ 1 | John | '1.8m' | 'Yes' | '84kg|85kg'
Si cela n'est pas possible, j'apprécierais de le savoir, alors n'hésitez pas à me le dire.
N'importe quelle légende SQL d'aide?
Il n'y a rien de tel que Group_Concat
dans SQL Server qui peut être utilisé directement. Vous pouvez utiliser FOR XML
dans une requête corrélée
SELECT ID,NAME, STUFF((SELECT '|'+TALL FROM Tbl1 t2 WHERE t2.ID = t1.ID AND t2.NAME = t1.NAME ORDER BY t2.descid FOR XML PATH(''),TYPE).value('.','VARCHAR(MAX)'),1,1,'') as tall, STUFF((SELECT '|'+GOODLOOKING FROM Tbl1 t2 WHERE t2.ID = t1.ID AND t2.NAME = t1.NAME ORDER BY t2.descid FOR XML PATH(''),TYPE).value('.','VARCHAR(MAX)'),1,1,'') as GOODLOOKING, STUFF((SELECT '|'+FAT FROM Tbl1 t2 WHERE t2.ID = t1.ID AND t2.NAME = t1.NAME ORDER BY t2.descid FOR XML PATH(''),TYPE).value('.','VARCHAR(MAX)'),1,1,'') as FAT FROM Tbl1 t1 GROUP BY ID,NAME
SQL Fiddle