sql - SQL JSON 嵌套选择
问题描述
我试图通过不两次生成相同的信息来提高查询的性能。
我想嵌套一些 JSON 而不在列名下添加 JSON。
我要嵌套的 JSON 存储在另一列中,因此我的查询如下所示:
SELECT
CONCAT(p.branch, p.policyref) AS 'policy_id'
, p.insurer AS 'insurer_code'
, p.Brand AS 'policy_name'
, p.sale_date AS 'sale_date'
, p.start_date AS 'start_date'
, p.end_date AS 'end_date'
, p.status
, p.customer_data_json -- This is the column with the other nested JSON
FROM
dbo.ic_brpolicy p1
WHERE
p.policyref = p1.PolRef@
AND p.branch = p1.B@
FOR JSON PATH
“customer_data_json”列是我希望嵌套的 JSON,但是由于列名,它会将 JSON 嵌套在“customer_data_json”下,但是我只想嵌套数据而不创建列名。
即这个
"start_date": "2020-06-20T00:00:00Z",
"end_date": "2021-06-20T00:00:00Z",
"status": "ACTIVE",
"drivers": [{
"driver_id": "Prop",
"main_driver": true,
"app_user": true,
代替
"start_date": "2020-02-27T00:00:00Z",
"end_date": "2021-02-27T00:00:00Z",
"status": "ACTIVE",
"customer_data_json": [{
"drivers": [{
"driver_id": "Prop",
"main_driver": true,
"app_user": true,
正如您所看到的,因为 JSON 来自“customer_data_json”列,它将信息嵌套在“customer_data_json”元素下,我不希望它开始“驱动程序”部分。
干杯
解决方案
正确的语句取决于存储在customer_data_json
列中的 JSON 的结构,但以下简化示例演示了一种可能的解决方案:
SELECT
p.start_date AS start_date,
p.end_date AS end_date,
p.status AS status,
JSON_QUERY(p.customer_data_json, '$[0].drivers') AS drivers
FROM
(VALUES ('2020-02-27T00:00:00', '2021-02-27T00:00:00', 'ACTIVE', '[{"drivers": [{"driver_id": "Prop","main_driver": true,"app_user": true}]}]')
) p (start_date, end_date, status, customer_data_json)
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
结果:
{
"start_date":"2020-02-27T00:00:00",
"end_date":"2021-02-27T00:00:00",
"status":"ACTIVE",
"drivers":[
{
"driver_id":"Prop",
"main_driver":true,
"app_user":true
}
]
}
推荐阅读
- php - 尝试显示 Wordpress 缩略图时出现 500 错误
- php - 如何将输入信息从 androidstodio 发送到 Localdatabase
- javascript - 在 Azure 上找不到 Nodemon
- java - 使用 Enterprise Security API Java 对阿拉伯文本进行编码
- hyperledger-composer - 找不到任何要为事务执行的函数
- java - 如何在 Java 9 Set.of 中保持秩序
- ios - 尝试获取视频文件的大小 (kb) 时出错
- spring-boot - spring-boot 1.5 ConfigurationProperties,属性中的数字在使用烤肉串案例时没有绑定
- c# - 我如何按名称获取 System.Object 的属性
- javascript - 为什么要为自定义函数提供参数并在 Javascript/NPM 模块中使用它?