Sql 如何将一行中的多个值拆分为单独的行?
我想在sap hanasql中将一行中的多个值拆分为一个单独的行。 表: 但我想要这样的输出:Sql 如何将一行中的多个值拆分为单独的行?,sql,hana,Sql,Hana,我想在sap hanasql中将一行中的多个值拆分为一个单独的行。 表: 但我想要这样的输出: id name 1 kabil 1 arasan 尽量避免列中类似csv的数据,例如在ETL过程中进行规范化 您可以使用一个过程,请参见[ 如果没有过程,您可以使用以下SQL(限制:它假设您的csv字段中有最大数量的值) CREATE COLUMN TABLE "TEST_SPLIT"( "SOME_KEY" VARCHAR(10), "CSV_STR" VARCHAR
id name
1 kabil
1 arasan
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"
创建列表“TEST\u SPLIT”(
“SOME_KEY”VARCHAR(10),
“CSV_STR”VARCHAR(1000);
插入“TEST_SPLIT”(“SOME_KEY”,“CSV_STR”)值('1','hello world');
在“TEST_SPLIT”(“SOME_KEY”,“CSV_STR”)值('2','1',2,3')中插入;
插入“测试分割”(“某些密钥”、“CSV字符串”)值('3',NULL);
从中选择*
(选择“某个要素”“要素”“要素编号”“ORD”,
SUBSTR_REGEXPR(')(?对SUBSTR_REGEXPR函数的使用进行了轻微调整。我上周刚刚在Hana中将其用作脚本视图,可以确认它是有效的
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
永远不要将数据存储为逗号分隔的项目!这只会给您带来很多麻烦。谢谢您的回复…但我只是在尝试如何在一列中输入多个值,以及如何拆分多个值…这就是y我发布了这个问题…您可以通过创建表类型函数来拆分逗号分隔的值和en使用值交叉应用
。类似的解决方案,我可以在SQL SERVER
中提供。
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