i am not sure this script will exactly useful to your requirement but i am just trying to give an idea how to split the data 
IF OBJECT_ID('tempdb..#Temp')IS NOT NULL
DROP TABLE #Temp
;WITH CTE(Id,data)
AS
(
SELECT 1,'abc-def-Opto'                 UNION ALL
SELECT 2,'abc-def-ijk-5C-hello-Opto'    UNION ALL
SELECT 3,'abc-def-ijk-4C-hi-Build'      UNION ALL
SELECT 4,'abc-def-ijk-4C-123-suppymanagement'
)
,Cte2
AS
(
SELECT Id, CASE WHEN Id=1   AND  Setdata=1 THEN data
                WHEN Id=2   AND  Setdata=2 THEN data
                WHEN Id=3   AND  Setdata=3 THEN data
                WHEN Id=4   AND  Setdata=4 THEN data
                ELSE NULL 
            END AS Data
FROM
(
SELECT  Id,
        Split.a.value('.','nvarchar(1000)') AS Data,
        ROW_NUMBER()OVER(PARTITION BY id ORDER BY id) AS Setdata
FROM(
SELECT Id,
       CAST('<S>'+REPLACE(data ,'-','</S><S>')+'</S>' AS XML) AS data
FROM CTE
) AS A
CROSS APPLY data.nodes('S') AS Split(a)
)dt
)
SELECT * INTO #Temp FROM Cte2 
SELECT STUFF((SELECT DISTINCT ', '+ 'Set_'+CAST(Id  AS VARCHAR(10))+':'+Data
FROM #Temp WHERE ISNULL(Data,'')<>'' FOR XML PATH ('')),1,1,'')
Result
Set_1:abc, Set_2:def, Set_3:ijk, Set_4:4C