嗨大家我是新来的,可以帮助您编写SQL脚本/函数以解决以下问题。
我有一个source
表,其中包含三列Name
,Value
,miNum
。此表中的数据示例如下:
Name Value miNum
A+B+C 1+2+3 a1
C+D+E 3+4+5 a3
E+F 5+2 a7
现在,我创建了一个final_table
,该表的列与source
表相同,但附加的列标记为a-z(总共29列)。
我希望脚本/函数做的是从source
表读取每一行并填充final_table
中的相应列。
final_table
Name Value miNum A B C D E F
A+B+C 1+2+3 a1 1 2 3
C+D+E 3+4+5 a3 3 4 5
E+F 5+2 a7 5 2
新的列将定期添加到final_table
中,因此将列硬编码到SQL代码中是没有意义的。是否可以在不对列名进行硬编码的情况下完成所有这些操作?
请有人可以告诉我如何实现这一切。
由于
答案 0 :(得分:0)
请根据此架构添加其余列:
select tst.*,
case when instr(name,'A') > 0 then substr(Value,instr(name,'A'),1) end A,
case when instr(name,'B') > 0 then substr(Value,instr(name,'B'),1) end B,
case when instr(name,'C') > 0 then substr(Value,instr(name,'C'),1) end C,
case when instr(name,'D') > 0 then substr(Value,instr(name,'D'),1) end D,
case when instr(name,'E') > 0 then substr(Value,instr(name,'E'),1) end E,
case when instr(name,'F') > 0 then substr(Value,instr(name,'F'),1) end F
from tst;
给出结果
NAME VALUE MINUM A B C D E F
------ ------ ------ - - - - - -
A+B+C 1+2+3 a1 1 2 3
C+D+E 3+4+5 a3 3 4 5
E+F 5+2 a7 5 2
请注意,此方法仅适用于唯一名称,即对于重复名称,仅显示第一个值,例如
NAME VALUE MINUM A B C D E F
------ ------ ------ - - - - - -
A+A+A 5+2+1 a11 5
另一个限制是密钥只有A-Z
且值是单个字符,如果这样,您可以使用此insert
填充目标表:< / p>
Insert into TARGET
(name, value, miNum,A,B,C,D,E,F)
select name, value, miNum,
case when instr(name,'A') > 0 then substr(Value,instr(name,'A'),1) end A,
case when instr(name,'B') > 0 then substr(Value,instr(name,'B'),1) end B,
case when instr(name,'C') > 0 then substr(Value,instr(name,'C'),1) end C,
case when instr(name,'D') > 0 then substr(Value,instr(name,'D'),1) end D,
case when instr(name,'E') > 0 then substr(Value,instr(name,'E'),1) end E,
case when instr(name,'F') > 0 then substr(Value,instr(name,'F'),1) end F
from source;
您必须将插入列列表和查询扩展到列Z
。