在 SQL 服务器中使用 JSON 数组代替传统的关系数据库,每个值在 1 行中
Use JSON array in SQL server instead of traditional relational database, each value in 1 row
我已将答案值保存在 table 行中,1 个答案 1 行,在此示例中为 5 行。
如果我将它迁移到 JSON 它将是 2 行(JSON)
Table
Id
Optionsid
Pid
Column
1
2
1
null
2
1
2
null
3
1
2
null
4
2
2
null
5
3
1
null
我想计算每个 Optionsid 和
有多少答案 (pid)
SELECT COUNT(pid)AS Counted, OptionsId
FROM Answer GROUP BY [Column], OptionsId
Table 结果
Counted
Optionsid
2
1
2
2
1
3
我有运行因此查询并保存在一个新的table
select * from Answer for Json Auto
Json Table 我在 Json
添加了 {"answer":}
id
pid
json
1
1
{"Answer":[{"Id":1,"Optionsid":2,"Pid":1}]}
2
2
{"Answer":[{"Id":2,"Optionsid":1,"Pid":2},{"Id":2,"Optionsid":1,"Pid":2},{"Id":3,"Optionsid":2,"Pid":2},{"Id":4,"Optionsid":3,"Pid":2}]}
我想从 Json Table 得到与 Table 结果相同的结果 以上,但我可以让它工作
这个查询只取数组中的第一个[0],我想要一个取数组中所有值的查询。
有人可以帮我解决这个问题吗?
Select Count(Json_value ([json], '$.Answer[0].Pid')) as Counted,
Json_value ([json], '$.Answer[0].Optionsid') as OptionsId
from [PidJson]
group by Json_value ([json],'$.Answer[0].Column'),Json_value
([json],'$.Answer[0].Optionsid')
这里有个fiddle想看
https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=0a2df33717a3917bae699ea3983b70b4
这是解决方案
SELECT Count(JsonData.Pid) as Counted,
JsonData.Optionsid
FROM PidJson AS RelationsTab
CROSS APPLY OPENJSON (RelationsTab.json,
N'$.Answer')
WITH (
Pid VARCHAR(200) N'$.Pid',
Optionsid VARCHAR(200) N'$.Optionsid',
ColumnValue INT N'$.Column'
) AS JsonData
Group by JsonData.ColumnValue, JsonData.Optionsid
感谢您花时间“强迫”我澄清我的问题,我找到了解决方案
我已将答案值保存在 table 行中,1 个答案 1 行,在此示例中为 5 行。 如果我将它迁移到 JSON 它将是 2 行(JSON)
Table
Id | Optionsid | Pid | Column |
---|---|---|---|
1 | 2 | 1 | null |
2 | 1 | 2 | null |
3 | 1 | 2 | null |
4 | 2 | 2 | null |
5 | 3 | 1 | null |
我想计算每个 Optionsid 和
有多少答案 (pid)SELECT COUNT(pid)AS Counted, OptionsId
FROM Answer GROUP BY [Column], OptionsId
Table 结果
Counted | Optionsid |
---|---|
2 | 1 |
2 | 2 |
1 | 3 |
我有运行因此查询并保存在一个新的table
select * from Answer for Json Auto
Json Table 我在 Json
添加了 {"answer":}id | pid | json |
---|---|---|
1 | 1 | {"Answer":[{"Id":1,"Optionsid":2,"Pid":1}]} |
2 | 2 | {"Answer":[{"Id":2,"Optionsid":1,"Pid":2},{"Id":2,"Optionsid":1,"Pid":2},{"Id":3,"Optionsid":2,"Pid":2},{"Id":4,"Optionsid":3,"Pid":2}]} |
我想从 Json Table 得到与 Table 结果相同的结果 以上,但我可以让它工作 这个查询只取数组中的第一个[0],我想要一个取数组中所有值的查询。 有人可以帮我解决这个问题吗?
Select Count(Json_value ([json], '$.Answer[0].Pid')) as Counted,
Json_value ([json], '$.Answer[0].Optionsid') as OptionsId
from [PidJson]
group by Json_value ([json],'$.Answer[0].Column'),Json_value
([json],'$.Answer[0].Optionsid')
这里有个fiddle想看
https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=0a2df33717a3917bae699ea3983b70b4
这是解决方案
SELECT Count(JsonData.Pid) as Counted,
JsonData.Optionsid
FROM PidJson AS RelationsTab
CROSS APPLY OPENJSON (RelationsTab.json,
N'$.Answer')
WITH (
Pid VARCHAR(200) N'$.Pid',
Optionsid VARCHAR(200) N'$.Optionsid',
ColumnValue INT N'$.Column'
) AS JsonData
Group by JsonData.ColumnValue, JsonData.Optionsid
感谢您花时间“强迫”我澄清我的问题,我找到了解决方案