For Dynamic columns you can try below solution
CREATE table #source (AccountNo varchar(2), GSTNumber varchar (5) ,GSTAmount INT)
insert into #source (AccountNo, GSTNumber,GSTAmount) values
('A1', 'GST1',1231),
('A1', 'GST2',1232),
('A1', 'GST3',1233),
('A2', 'GST1',1241),
('A2', 'GST2',1242),
('A3', 'GST1',1243),
('A3', 'GST2',1244),
('A3', 'GST3',1251),
('A3', 'GST4',1252),
('A4', 'GST1',1253)
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
SELECT @cols = STUFF
(
(
SELECT ',' + QUOTENAME(GSTNumber)
FROM #source
GROUP BY GSTNumber
ORDER BY GSTNumber
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'),
1,1,''
);
SET @query = 'SELECT AccountNo,' + @cols + '
FROM
(
SELECT AccountNo,GSTNumber,GSTAmount
FROM #source
) x
PIVOT
(
MAX(GStAmount)
FOR GSTNumber IN (' + @cols + ')
) p ';
EXECUTE(@query);