如何将一行中的多个值拆分为单独的行?

问题描述 投票:1回答:2

我想将一行中的多个值拆分为sap hana sql中的单独行。表:

 id  name
 1   kabil,arasan

但我想要一个像这样的输出:

id  name
1   kabil  
1   arasan
sql hana
2个回答
2
投票
  1. 尽量避免在列中使用类似csv的数据,例如在ETL过程中规范化
  2. 你可以使用一个程序,见[HANA: Split string?
  3. 如果没有过程,您可以使用以下SQL(限制:它假定您的csv-field中有最大数量的值)。我只会将它用于特殊目的。 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?

0
投票

略微调整使用SUBSTR_REGEXPR函数。我上周在Hana中使用过这个作为Script_View并且可以确认它有效。

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

© www.soinside.com 2019 - 2024. All rights reserved.