您好:
因為在colpit查過,都卡死,所以在此請教一下前輩們是否可以解惑
 "Id","LotsId","Data" 1 ,100,"{"Result": [[0, 0, 3, 10, 11,], [0, 0, 9, 0, 0,], [1, 0, 0, 0, 0, ][, "Settings": [500, 4000, 100]}" 
要如何轉成
"Id","LotsId","key", "grade","val" 
1 ,100,A, 1 ,0 
1 ,100,A, 2 ,0 
1 ,100,A, 3 ,3 
1 ,100,A, 4 ,10 
1 ,100,A, 5 ,1 
1 ,100,B, 1 ,0 
1 ,100,B, 2 ,0 
1 ,100,B, 3 ,9 
1 ,100,B, 4 ,0 
1 ,100,B, 5 ,0 
1 ,100,B, 1 ,1 
1 ,100,B, 2 ,0 
1 ,100,B, 3 ,0 
1 ,100,B, 4 ,0 
1 ,100,B, 5 ,0
第一段 Data抓出來的是 Character Varying(10000) 型態
SELECT 
        "Id",
        "LotsId",        
	     --"Data"
         jsonb_array_elements(("Data"::jsonb->'Result')::jsonb) AS result_array
    FROM  "AA"
jsonb_array_elements(("Data"::jsonb->'Result')::jsonb) AS result_array
他抓出來,並展開
"Id","LotsId", result_array
1 ,100,  [0, 0, 3, 10, 11,],
1 ,100,  [0, 0, 9, 0, 0,],
1 ,100,  [1, 0, 0, 0, 0, ]
但,他沒有 根據陣列 排序, 加一個欄位
"Id","LotsId", result_array ,index
1 ,100,  [0, 0, 3, 10, 11,], 1
1 ,100,  [0, 0, 9, 0, 0,], 2
1 ,100,  [1, 0, 0, 0, 0, ],3
有row_number() OVER (PARTITION BY "Id", "LotsId" ORDER BY (SELECT NULL)) AS XX
但就一直卡死在這邊
ERROR:  failed to find conversion function from unknown to text
SQL state: XX000
再請指導一下
謝謝
create table it0215 (
  id int
, lotid int
, data json
);
insert into it0215 values
(1, 100, '{"Result": [[0, 0, 3, 10, 11], [0, 0, 9, 0, 0], [1, 0, 0, 0, 0]], "Settings": [500, 4000, 100]}' );
with t1 as (
select id, lotid
     , json_array_elements(data -> 'Result') as result_array
  from it0215
)
select id, lotid
     , grade::int
     , value::int
  from t1
  cross join json_array_elements_text(result_array) with ordinality t(value, grade);
 id | lotid | grade | value
----+-------+-------+-------
  1 |   100 |     1 | 0
  1 |   100 |     2 | 0
  1 |   100 |     3 | 3
  1 |   100 |     4 | 10
  1 |   100 |     5 | 11
  1 |   100 |     1 | 0
  1 |   100 |     2 | 0
  1 |   100 |     3 | 9
  1 |   100 |     4 | 0
  1 |   100 |     5 | 0
  1 |   100 |     1 | 1
  1 |   100 |     2 | 0
  1 |   100 |     3 | 0
  1 |   100 |     4 | 0
  1 |   100 |     5 | 0
(15 rows)
你的key A,B 那個,看不出來.
您好:
, json_array_elements(data -> 'Result') as result_array
這一段就 有問題了
我這邊欄位需要「"」圈起
json_array_elements("Data"->'Result') as result_array
Data 那一個欄位我看是 character varing
謝謝
ERROR:  operator does not exist: character varying -> unknown
LINE 8:        json_array_elements("Data"->'Result') as result_array
                                         ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.
SQL state: 42883
Character: 224
您好:
最後有依據您的指導,修改如下
WITH ResultCTE AS (
  SELECT
    Id,
    Lotid,
    json_array_elements(Data::json -> 'Result') AS result_array,
    generate_series(1, json_array_length(Data::json -> 'Result')) AS index1
  FROM it0215
),
FlattenedCTE AS (
  SELECT
    Id,
    Lotid,
    index1,
    generate_series(1, json_array_length(result_array::json)) AS index2,
    json_array_elements(result_array::json) AS value
  FROM ResultCTE
)
SELECT
  Id,
  Lotid,
  index1,
  index2,
  value::text::int as value
FROM  FlattenedCTE
應該就可以了
謝謝
Some upgrades open up fun interactions, while Chill Guy Clicker others bring about amusing animations or extra rewards.