sql json嵌套选择

bxgwgixi  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(326)

我试图通过不两次生成相同的信息来提高查询的性能。
我想嵌套一些json而不在列名下添加json。
我要嵌套的json存储在另一列中,因此我的查询如下所示:

  1. SELECT
  2. CONCAT(p.branch, p.policyref) AS 'policy_id'
  3. , p.insurer AS 'insurer_code'
  4. , p.Brand AS 'policy_name'
  5. , p.sale_date AS 'sale_date'
  6. , p.start_date AS 'start_date'
  7. , p.end_date AS 'end_date'
  8. , p.status
  9. , p.customer_data_json -- This is the column with the other nested JSON
  10. FROM
  11. dbo.ic_brpolicy p1
  12. WHERE
  13. p.policyref = p1.PolRef@
  14. AND p.branch = p1.B@
  15. FOR JSON PATH

列“customer\u data\u json”是我希望嵌套的json,但是由于列名的原因,它将json嵌套在“customer\u data\u json”下,但是我只想在不创建列名的情况下嵌套数据。
i、 e.这个

  1. "start_date": "2020-06-20T00:00:00Z",
  2. "end_date": "2021-06-20T00:00:00Z",
  3. "status": "ACTIVE",
  4. "drivers": [{
  5. "driver_id": "Prop",
  6. "main_driver": true,
  7. "app_user": true,

而不是

  1. "start_date": "2020-02-27T00:00:00Z",
  2. "end_date": "2021-02-27T00:00:00Z",
  3. "status": "ACTIVE",
  4. "customer_data_json": [{
  5. "drivers": [{
  6. "driver_id": "Prop",
  7. "main_driver": true,
  8. "app_user": true,

正如您所看到的,因为json来自列“customer\u data\u json”,它将信息嵌套在“customer\u data\u json”元素下,我不希望这样做,我只希望它开始“driver”部分。
干杯

cidc1ykv

cidc1ykv1#

正确的语句取决于存储在 customer_data_json 列,但下面的简化示例演示了一种可能的解决方案:

  1. SELECT
  2. p.start_date AS start_date,
  3. p.end_date AS end_date,
  4. p.status AS status,
  5. JSON_QUERY(p.customer_data_json, '$[0].drivers') AS drivers
  6. FROM
  7. (VALUES ('2020-02-27T00:00:00', '2021-02-27T00:00:00', 'ACTIVE', '[{"drivers": [{"driver_id": "Prop","main_driver": true,"app_user": true}]}]')
  8. ) p (start_date, end_date, status, customer_data_json)
  9. FOR JSON PATH, WITHOUT_ARRAY_WRAPPER

结果:

  1. {
  2. "start_date":"2020-02-27T00:00:00",
  3. "end_date":"2021-02-27T00:00:00",
  4. "status":"ACTIVE",
  5. "drivers":[
  6. {
  7. "driver_id":"Prop",
  8. "main_driver":true,
  9. "app_user":true
  10. }
  11. ]
  12. }
展开查看全部

相关问题