Witam.

Czy jest możliwe aby mając przykładowo taka bazę:
http://sqlfiddle.com/#!6/30f02/3

CREATE TABLE towar -- definicje towarow
(
  id int,
  nazwa VARCHAR(50)
);

CREATE TABLE cechatowaru -- definicje cech towarow
( 
  id int,
  nazwa VARCHAR(50)
);

CREATE TABLE towarcecha -- tabela zlaczeniowa
(
  idTowar int,
  idCecha int
);
 

INSERT INTO towar (id, nazwa) VALUES
(1, 'mlotek'),
(2, 'gwozdzie'),
(3, 'klodka');

INSERT INTO cechatowaru (id, nazwa) VALUES
(1, 'sztukowy'),
(2, 'wagowy'),
(3, 'rabatowany'),
(4, 'dowyjscia')

INSERT INTO towarcecha (idTowar, idCecha) VALUES
(1,1),
(2,2),
(3,1),
(1,3),
(2,4)
 

napisać takie zapytanie aby wynikiem było:

nazwa towaru cechy
mlotek sztukowy, rabatowany
gwozdzie wagowy, dowyjscia
klodka sztukowy

Czyli jak mamy wiele dopasowań to nie tworzą się kolejne rekordy tylko wszystkie dopasowania agregują się do jednej komórki.

Z góry dziękuje za pomoc.


Podpierając się tym co znalazłem w sieci napisałem cos takiego:

select distinct t2.nazwa, 
  STUFF(
         (SELECT distinct ', ' + CAST(ct.nazwa AS varchar(MAX))
          FROM towar t1
          LEFT JOIN towarcecha tc on t1.id = tc.idTowar
          LEFT JOIN cechatowaru ct ON tc.idCecha = ct.id
          where t1.id = t2.id
          FOR XML PATH ('')), 1, 1, '') col2
from towar t2;

niby działa, ale żebym rozumiał jak to działa to nie powiem :P