在来自 OPENJSON 的结果集上使用 STUFF()

Use STUFF() on a result set coming from OPENJSON

我有一个 ClassTable,如下所示,其中有一个 Languages 列,其中数据位于 JSON:

ID Title Languages
1 Class1 [{"ID": 1, "Name": "English"},{"ID": 2, "Name": "Hindi"}]
2 Class2 [{"ID": 1, "Name": "Marathi"},{"ID": 2, "Name": "Telugu"}]

Master table 的 Languages 作为

ID Name
1 English
2 Hindi
3 Marathi
4 Telugu

我需要如下输出

ID Title LanguageIDs
1 TestTitle1 1,2

我正在尝试使用 OPENJSONJSON 获取数据,然后我将 STUFF() 应用于该数据,以便获得逗号分隔的 LanguageIDs

这是我编写的查询,但没有得到预期的输出

SELECT 
    A.ID,
    A.Title,
    LanguageIDs = STUFF ((SELECT CONCAT(',',A.ID)
                          FROM Master.Languages
                          WHERE ID IN (A.LanguageID)
                          FOR XML PATH(''), TYPE).value('.', 'VARCHAR(MAX)'), 1, 1, SPACE(0))
FROM
    (SELECT 
         X.ID,
         X.Title,
         X.CreatedOn,
         B.ID as LanguageID
     FROM 
         ClassTable X
     CROSS APPLY  
         OPENJSON(Languages)
             WITH (ID INT '$.ID') as B
     WHERE 
         X.ID = 1) AS A

谁能告诉我我犯了什么错误?还是我必须尝试不同的方法来解决这个问题?

从逻辑上讲,它应该有效

 SELECT 
         X.ID,
         X.Title,
        (
        select cast(ID as varchar) +',' from OPENJSON(x.Languages)
             WITH (ID INT '$.ID')
             for xml path('')
        ) LanguageID
     FROM 
         ClassTable X where x.id=1