You can use FOR XML PATH and STUFF to get the result:
select subcategoryname, count(*) total, STUFF( (SELECT ', ' + cast(t2.pid as varchar(50)) FROM yt t2 where t.categoryname = t2.categoryname and t.subcategoryname = t2.subcategoryname FOR XML PATH ('')) , 1, 1, '') AS pid from yt t group by categoryname, subcategoryname;
See SQL Fiddle with Demo . It gives the result:
| SUBCATEGORYNAME | TOTAL | PID | --------------------------------------------------------------------------------------- | Baby Lotion | 2 | 424, 428 | | Bath Accessories | 7 | 445, 337, 69, 143, 147, 213, 270 | | Bath Toys | 4 | 197, 390, 396, 416 | | Bath Tub | 11 | 361, 447, 464, 491, 204, 286, 237, 240, 248, 148, 23 | | Humidifier | 2 | 153, 485 | | Other | 2 | 14, 64 | | Shampoo & Body Wash | 1 | 73 | | Towels | 1 | 449 |
Taryn source share