Please try the following solution. It will work starting from SQL Server 2008 onwards.
SQL
--DDL and sample data population, start
DECLARE @tbl TABLE
(
VenNumber INT,
VenName VARCHAR(60),
Ctypes varchar(50),
Purpose varchar(500),
Country varchar(20)
);
INSERT INTO @tbl VALUES
(23248,'Automoci','Organisation','Business','USA'),
(23248,'Automoci','Organisation','Purchase order confirmation','USA'),
(23248,'Automoci','Organisation','Supply Chain Contact','USA'),
(23642,'Palau','Person','Business','ES'),
(23642,'Palau','Person','Supply Chain Contact','ES'),
(23642,'Palau','Person','Invoice','ES');
--DDL and sample data population, end
DECLARE @separator CHAR(1) = ';';
SELECT VenNumber,VenName,Ctypes
, STUFF((SELECT @separator + CAST(Purpose AS VARCHAR(500)) AS [text()]
FROM @tbl AS O
WHERE O.VenNumber = C.VenNumber
FOR XML PATH('')), 1, 1, NULL) AS PurposeList
, Country
FROM @tbl AS c
WHERE Ctypes = 'Organisation'
GROUP BY VenNumber,VenName,Ctypes,Country
UNION ALL
SELECT *
FROM @tbl
WHERE Ctypes <> 'Organisation';