Jos*_*uiz 2 sql t-sql sql-server json jsonpath
我正在尝试以 JSON 检索一些数据,但是,我正在努力以正确的方式对其进行格式化,以下是一个示例:
CREATE TABLE #test (id int identity(1,1), name varchar(100), EntityType VARCHAR(10))
insert into #test values('Dell','PC')
insert into #test values('Microsoft','CO')
insert into #test values('MAC','PC')
insert into #test values('APPLE','CO')
SELECT * FROM #test WHERE EntityType = 'PC' FOR JSON PATH, ROOT('??')
drop table #test
Run Code Online (Sandbox Code Playgroud)
我一直在尝试使用 root 但没有成功
我正在寻找这个结果,它是一个对象,然后是一个按列分组的数组
{
"CO": [
{
"id": 1,
"name": "Dell",
},
{
"id": 2,
"name": "Microsoft",
},
]
"PC" :[
{
"id": 3,
"name": "MAC",
},
{
"id": 4,
"name": "APPLE",
}]
}
Run Code Online (Sandbox Code Playgroud)
另一种没有动态 SQL 的方法。
EntityType 级别的根值来自表。
SQL
-- DDL and sample data population, start
DECLARE @tbl TABLE (id INT IDENTITY PRIMARY key, [name] varchar(100), EntityType VARCHAR(10));
INSERT INTO @tbl VALUES
('Dell','PC'),
('Microsoft','CO'),
('MAC','PC'),
('APPLE','CO');
-- DDL and sample data population, end
SELECT CONCAT(
N'{',
STUFF(
(
SELECT DISTINCT CONCAT(N',"', k.EntityType, '":', c.[Json])
FROM @tbl AS k
CROSS APPLY (
SELECT id, [name]
FROM @tbl
WHERE EntityType = k.EntityType
FOR JSON PATH
) c([Json])
FOR XML PATH('')
), 1, 1, N''
),
N'}'
) AS JsonOutput;
Run Code Online (Sandbox Code Playgroud)
输出
{
"CO": [
{
"id": 2,
"name": "Microsoft"
},
{
"id": 4,
"name": "APPLE"
}
],
"PC": [
{
"id": 1,
"name": "Dell"
},
{
"id": 3,
"name": "MAC"
}
]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
174 次 |
| 最近记录: |