I don't agree with storing values as separated lists.
But, to answer your question, I have made the assumption that TB_CongVan is the parent table, and cap2 is the child table.
SELECT
cv.SoCV
, ReadUser = cv.ReadUser + ISNULL('|' + cap.ReadUser, '')
FROM dbo.TB_CongVan AS cv
LEFT JOIN (
SELECT
SoCV
, ReadUser = LTRIM(RTRIM(STUFF((
SELECT '|' + d.ten
FROM dbo.cap2 AS d
WHERE c.SoCV = d.SoCV
ORDER BY d.id
FOR XML PATH('')
), 1, 1, '')))
FROM dbo.cap2 AS c
GROUP BY c.SoCV
) AS cap
ON cv.SoCV = cap.SoCV;