How to split multiple values from a row into separate rows?

为君一笑 提交于 2019-12-31 04:33:08

问题


I want to split multiple values from a row into a separate row in sap hana sql. table :

 id  name
 1   kabil,arasan

but I want an output like this:

id  name
1   kabil  
1   arasan

回答1:


  1. try to avoid csv-like data in columns, e.g. normalize during ETL process
  2. you can use a procedure, see [HANA: Split string?
  3. without a procedure you can use the following SQL (restriction: it assumes a maximum number of values in your csv-field). I would use it only for adhoc purposes.

    CREATE COLUMN TABLE "TEST_SPLIT"(
        "SOME_KEY" VARCHAR(10),
        "CSV_STR" VARCHAR(1000) );
    
    INSERT INTO "TEST_SPLIT" ("SOME_KEY", "CSV_STR") VALUES ('1', 'hello world');
    INSERT INTO "TEST_SPLIT" ("SOME_KEY", "CSV_STR") VALUES ('2', 'one,two,three');
    INSERT INTO "TEST_SPLIT" ("SOME_KEY", "CSV_STR") VALUES ('3', NULL);
    
    Select * from 
    ( select "SOME_KEY" "KEY", "ELEMENT_NUMBER" "ORD", 
           SUBSTR_REGEXPR('(?<=^|,)([^,]*)(?=,|$)' IN "TEST_SPLIT"."CSV_STR" OCCURRENCE "SERIES"."ELEMENT_NUMBER" GROUP 1) "VAL"
      from "TEST_SPLIT",
           SERIES_GENERATE_INTEGER(1, 1, 10 ) "SERIES" -- replace 10 with your max. number of values in CSV-Field
    )
    where "VAL" is not null
    order by "KEY", "ORD"
    

    [1]: HANA: Split string?




回答2:


Slight tweaking of the use of the SUBSTR_REGEXPR function. I've used this just last week in Hana as a Script_View and can confirm it works.

Begin
VAR_OUT =
    select *
    from ( select
    ST.PARAM, -- Source table id
    NT.Element_Number, -- Occurrence number within source table row
SUBSTR_REGEXPR( '([;])([^;]*)(?=;)'
IN   CONCAT(CONCAT(';',ST.VALUE),';')
     OCCURRENCE NT.Element_Number
    GROUP 2
    ) splitted      -- string piece
from 
"_SYS_BIC"."Financial_Planning_and_Analysis/ZZTPARPAR_SOURCE" as ST, -- source  table
SERIES_GENERATE_INTEGER(1, 0, 10 ) as NT -- numbers table
    ) tbl
where splitted is not null
order by PARAM, Element_Number;
End     

Before and After



来源:https://stackoverflow.com/questions/44110999/how-to-split-multiple-values-from-a-row-into-separate-rows

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!