• 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;