必须从阶段表中提取数据,其中数据位于单列中,以逗号作为分隔符。
数据原样 “pBKey、pBIdentifier、pBDateTime、商店、描述、DeptComm、提供商、OrderReferenceNumber、、、、” “XY-XYX-1234”,“规则-XYZ-XYZ”,20240401,“TWXY”,,,,,“XYZXWENZ”
产出 在此输入图片描述
尝试了 SPLIT_TO_TABLE 和 Pivot 的组合,但结果不符合预期。
SQL:
DECLARE
col_list STRING DEFAULT (
SELECT CONCAT('(',LISTAGG(VALUE_COL, ','),')) ORDER BY 1') AS RESULTSTRING FROM
(SELECT DISTINCT VALUE_COL FROM CSV_TEST ORDER BY 1) AS TMP);
SQL_TO_EXECUTE STRING;
RS RESULTSET;
BEGIN
SQL_TO_EXECUTE := $$
SELECT * FROM
(
SELECT SEQ as ID, TRIM(F1.VALUE) AS COLNAME, INDEX AS VALUE_COL
FROM DATA_LOCATION S
, LATERAL SPLIT_TO_TABLE(AS_VARCHAR(S.MESSAGE), ',') F1
)SRC
PIVOT(
MIN(COLNAME) FOR VALUE_COL IN $$ || col_list ;
RS := (EXECUTE IMMEDIATE SQL_TO_EXECUTE);
RETURN TABLE(RS);
END;
结果: 在此输入图片描述
需要删除标题列并将第二行作为标题。
如何得到预期的结果?任何帮助将不胜感激。
如果列数固定,您可以使用 Strtok_To_Array 如下
select fld1[0] pBKey , fld1[1] as pBDateTime, fld1[2] as Store,
fld1[3] as Description from(
SELECT STRTOK_TO_ARRAY('XY-XYX-1234, RULE-XYZ-XYZ,20240401, TWXY', ',') fld1
);