我有一個具有這種結構的 json 元素
字母陣列(A、B、C 或 D):
_1,
-start - end_2,
-start -end
- _3,
-start -end
我想獲得這樣的表
物件型別 1_開始 1_結束 2_開始 2_結束 3_開始 3_結束 一個 價值 價值 價值 價值 價值 價值 乙 價值 價值 價值 價值 價值 價值 C 價值 價值 價值 價值 價值 價值
值可以為空
WITH d (department_data) AS (SELECT (UTL_RAW.cast_to_raw ('{
"r": [
{
"obj_type": "A",
"_1": {
"start": "1",
"end": "2"
},
"_2": {
"start": "15",
"end": "25"
},
"_3": {
"start": "26",
"end": "33"
}
},
{
"obj_type": "B",
"_1": {
"start": "1",
"end": "2"
},
"_2": {
"start": "3",
"end": "12"
}
}, {
"obj_type": "C",
"_2":{
"start": "1",
"end": "2"
}
}, {
"obj_type": "D",
"_3": {
"start": "",
"end": "2"
}
}
]
}')) FROM DUAL)
--select * from d;
SELECT j.*
FROM d,
JSON_TABLE (
d.department_data,
'$'
COLUMNS (
NESTED PATH '$.r[*]'
COLUMNS (
name PATH '$.obj_type',
NESTED PATH '$._1[*]'
columns ("_1_start" PATH '$.start',
"_2_end" PATH '$.end'),
NESTED PATH '$."_2"[*]'
columns ("UVG_start" PATH '$.start',
"UVG - Zusatz_end" PATH '$.end'),
NESTED PATH '$."_3"[*]'
columns ("UVG - Ueberschusslohn_start" PATH '$.start',
"UVG - Ueberschusslohn_end" PATH '$.end')
))) j
這個查詢沒有回傳我所期望的。
行是重復的。從_1 開始和結束不是從_2 開始和結束的同一行。此外,如果沒有值,則不會列印它們。
總而言之,像這樣
物件型別 1_開始 1_結束 2_開始 2_結束 3_開始 3_結束 一個 價值 價值 沒有什么 沒有什么 沒有什么 沒有什么 一個 沒有什么 沒有什么 價值 價值 沒有什么 沒有什么 一個 沒有什么 沒有什么 沒有什么 沒有什么 價值 價值
B和C一樣
代碼
uj5u.com熱心網友回復:
使用您的示例資料,您不需要重復的nested path元素,您可以這樣做:
SELECT j.*
FROM d
CROSS APPLY JSON_TABLE (
d.department_data,
'$'
COLUMNS (
NESTED PATH '$.r[*]'
COLUMNS (
name PATH '$.obj_type',
"_1_start" PATH '$."_1".start',
"_1_end" PATH '$."_1".end',
"_2_start" PATH '$."_2".start',
"_2_end" PATH '$."_2".end',
"_3_start" PATH '$."_3".start',
"_3_end" PATH '$."_3".end'
)
)
) j
| 姓名 | _1_開始 | _1_結束 | _2_開始 | _2_結束 | _3_開始 | _3_結束 |
|---|---|---|---|---|---|---|
| 一個 | 1 | 2 | 15 | 25 | 26 | 33 |
| 乙 | 1 | 2 | 3 | 12 | 無效的 | 無效的 |
| C | 無效的 | 無效的 | 1 | 2 | 無效的 | 無效的 |
| D | 無效的 | 無效的 | 無效的 | 無效的 | 無效的 | 2 |
db<>小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/486126.html
