Dynamic pivot in SQL Server

Dynamic Pivot is used when I don't know the limit of the given list:

create table ProductSale(Empid int,Product varchar(10), Quantity int)

select * from ProductSale

Insert into ProductSale values(101,'T-shirts',10) ,(101,'Paints',50) ,(120,'Paints',20) ,(120,'Socks',50),(130,'Bags',10)

Insert into ProductSale values(101,'Shirts',10) ,(101,'shoes',50) ,(120,'Cap',20) ,(120,'towel',50),(130,'socks',10)

------------------------------------------Note--------------------------------------

Here I do not know how many products are there in my productlist

So instead of a normal pivot, I will use the concept of the Dynamic pivot

--First declare the productlist variable to store all the productnames

Declare @Productlist varchar(max);

--Select the distinct product from the ProductSale. Use this query to get all the products and apply this login in your @productlist to store all the productname

set @Productlist =SUBSTRING(( select distinct ',[' +product+']' from ProductSale for xml path('')),2,8000)

Declare @query varchar(max);

set @query ='

Select Empid, '+@Productlist+' from

(

select Empid , Product , Quantity from ProductSale

) as sourcecode

pivot

(

sum(Quantity) for Product in ('+@Productlist+')

) Dynamicpivot '

execute (@query)

---------------------------------------------------------------------------------------------------

--Select the following code and Run this query

Declare @Productlist varchar(max),@query varchar(max);

set @Productlist =SUBSTRING(( select distinct ',[' +product+']' from ProductSale for xml path('')),2,8000)

set @query ='

Select Empid, '+@Productlist+' from

(

select Empid , Product , Quantity from ProductSale

) as sourcecode

pivot

(

sum(Quantity) for Product in ('+@Productlist+')

) Dynamicpivot '

execute (@query)