0票
1视图嗨,我有一个场景,其中我们有一个记录和多个列,比如这个Record_number cd1 cd2 cd3 cd4 cd5 cd6 cd7 cd8 cd9
下面是上述记录123、12、null 13、14、null 15、16、17空的值,这里有cd1的值,而不是cd2的值,cd3的值,所以cd2是空的,所以cd3应该进入cd2,因为它是空的,所以我们应该将下一个可用值移到以前的可用空间。
有人知道如何实现这个场景吗?
发布于 2016-04-20 23:14:29
如果我正确理解您的问题,这可以很容易地使用表达式转换来完成。
发布于 2016-04-21 15:26:02
首先,创建一个变量端口,该端口将使用一些分隔符(例如|)连接所有非空值,例如:
IIF(ISNULL(cd1),'',cd1 || '|') ||
IIF(ISNULL(cd2),'',cd2 || '|') ||
...
IIF(ISNULL(cd9),'',cd9 || '|') ||这将导致删除空值的管道分隔列表,例如:123|12|13|14|15|16|17|
接下来,为每个列创建一个输出端口,它将使用分隔符的索引获得正确的子字符串。我会把这部分的编码交给你,但如果你有问题,请告诉我。
发布于 2016-04-21 15:33:51
一种方法可以是使用如下表达式转换:
首先,使用分隔符(例如',')将单个字段中的所有端口连接起来。
v_CONCAT:= cd1||','||cd2||','||cd3||','||cd4||','||cd5||','||cd6||','||cd7||','||cd8||','||cd9现在使用正则表达式创建输出端口。
o_cd1:=REG_EXTRACT(v_CONCAT,',*([^,]*),*([^,]*),*([^,]*),*([^,]*),*([^,]*),*([^,]*),*([^,]*),*([^,]*),*([^,]*)',1)
o_cd2:=REG_EXTRACT(v_CONCAT,',*([^,]*),*([^,]*),*([^,]*),*([^,]*),*([^,]*),*([^,]*),*([^,]*),*([^,]*),*([^,]*)',2)
o_cd3:=REG_EXTRACT(v_CONCAT,',*([^,]*),*([^,]*),*([^,]*),*([^,]*),*([^,]*),*([^,]*),*([^,]*),*([^,]*),*([^,]*)',3)
.
.
and so on.REG_EXTRACT从匹配正则表达式的输入字符串中提取子字符串。
() -一个团体。将有与您的端口cd1-cd12一样多的组。,* -零或多个逗号,如果值为null,两个逗号将连续出现。[^,] -除了逗号以外的任何东西[^,]* -除逗号外,任何字符的零或多个字符REG_EXTRACT的第三个参数表示要作为输出的组。对于o_cd1,我们需要第一个非空值,所以它是1,对于o_cd2,它是2,依此类推。
https://stackoverflow.com/questions/36751609
复制相似问题