If you don't know for sure how many values per Column1 there will be, you'll have to do dynamic SQL.
Adapting @LukStorms excellent answer above:
IF OBJECT_ID('tempdb..#MyTable') IS NOT NULL
DROP TABLE #MyTable
create table #MyTable (c nvarchar(1), v int)
insert into #MyTable
select 'A',10
union select 'B',20
union select 'C',11
union select 'A',40
union select 'B',30
union select 'C',22
union select 'A',60
union select 'C',28
union select 'C',150
declare @s varchar(max), @maxVals int, @i int = 1
select @maxVals = max(ct) from (select c,count(*) as ct from #MyTable group by c) as x
set @s = 'SELECT *
FROM
(
SELECT c as Column1, v
, Col = CONCAT(''Value'', ROW_NUMBER() OVER (PARTITION BY c ORDER BY v))
FROM #MyTable
) Src
PIVOT (
MAX(v)
FOR Col IN ('
while @i <= @maxVals
begin
set @s = @s + 'Value' + cast(@i as varchar)
if @i < @maxVals
set @s = @s + ', '
set @i = @i +1
end
set @s = @s + ')
) Pvt'
exec(@s)
Note that SQL won't necessarily keep the order the values were inserted, unless you use an identity column and sort on that. Also, if a column1 has more than one value the same, it will ignore the duplicate.
Hope that helps, and thanks @LukStorms for the initial work