Simple example how to use GROUP and ORDER BY in child nodes:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | Create Table vendor( id_vendor int not null primary key, name varchar(100) ) Create Table model( id_model int not null primary key, id_vendor int foreign key (id_vendor) references vendor(id_vendor), name varchar(100) ) Insert Into vendor ( id_vendor, name ) Select 1, 'Audi' Union Select 2, 'Opel' Insert Into model ( id_model, id_vendor, name ) Select 1, 1, 'A3' Union Select 2, 1, 'A1' Union Select 3, 1, 'A4' Union Select 4, 2, 'Vectra' Union Select 5, 2, 'Astra' Union Select 6, 2, 'Omega' ;With cte As ( Select vendor.id_vendor, vendor.name As vendor_name, model.id_model, model.name As model_name From vendor Inner Join model On vendor.id_vendor = model.id_vendor ) Select id_vendor, vendor_name, (Select id_model, model_name From cte As detail Where detail.id_vendor = cte.id_vendor Order By model_name For Xml Path('detail'), Type ) From cte Group By id_vendor, vendor_name Order By vendor_name Desc For Xml Path('vendor'), Root('root') |