0

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

ID 标题 语言
1 第一类 [{“ID”:1,“姓名”:“英语”},{“ID”:2,“姓名”:“印地语”}]
2 2 类 [{“ID”:1,“姓名”:“马拉地语”},{“ID”:2,“姓名”:“泰卢固语”}]

和一个Master表格Languages

ID 姓名
1 英语
2 印地语
3 马拉地语
4 泰卢固语

我需要如下输出

ID 标题 语言 ID
1 测试标题1 1,2

我试图通过OPENJSON从中获取数据来实现这一点,JSON然后我将STUFF()其应用于该数据,以便获得逗号分隔的 LanguageID

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

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

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

4

1 回答 1

1

从逻辑上讲,它应该工作

 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
于 2020-12-24T09:58:37.113 回答