Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL, questions sur la jointure

malheureusement, il n'y a pas de moyen simple de le faire dans SQL Server. Les solutions connues sont :

  • astuce xml (voir ci-dessous) ;
  • utiliser une variable pour accumuler des données (ne fonctionne pas pour plusieurs lignes de groupe, uniquement avec le curseur) ;
  • agrégat CLR personnalisé ;

voici xml :

select
    n.name1,
    stuff(
        (
         select ', ' + p.product
         from prod as p
         where p.id_name = n.id
         for xml path(''),  type).value('.', 'nvarchar(max)')
    , 1, 2, '') as products
from name as n

démo de violon SQL

voici la variable :

declare @product nvarchar(max), @id int

select @id = 1

select @product = isnull(@product + ', ', '') + product
from prod
where id_name = @id

select name1, @product as products
from name 
where id = @id

démo de violon SQL