在 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

感谢您花时间“强迫”我澄清我的问题,我找到了解决方案