在来自 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
我正在尝试使用 OPENJSON
从 JSON
获取数据,然后我将 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
我有一个 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 |
我正在尝试使用 OPENJSON
从 JSON
获取数据,然后我将 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