我有一个“表A”,结构如下:
Act_Code ACT_TYPE_1 ACT_TYPE_2 ACT_TYPE_3 ACT_TYPE_4
-------- -------- ----------- ---------- -----------
ACT1 A NULL NULL NULL
ACT2 NULL B NULL NULL
ACT3 NULL NULL C NULL
ACT4 NULL NULL NULL D
ACT1 A NULL NULL NULL
如您所见,ACT_TYPE数据将始终存储在字段名称中,该字段名称是“Act_Code”字段的最后一位数字: 例如。 当Act_Code =“ACT1”时,Act_Type存储在字段“ACT_TYPE_1”中 当Act_Code =“ACT2”时,Act_Type存储在字段“ACT_TYPE_2”中 等等...
现在,我想从上面的“表A”中读取数据并插入具有以下结构的“表B”中:
ACT ACT_TYPE
---- --------
1 A
2 B
3 C
4 D
问题: * 1。如何在选择查询中添加“动态列名称”? *
例如,
INSERT INTO Table_B (ACT, ACT_TYPE)
SELECT RIGHT(Act_Code,1), ## FROM Table_A
如何根据上面的符号“##”处理动态列名?
我试过了:
SET @sql = 'INSERT INTO Table_B (ACT,ACT_TYPE) '
SET @sql = @sql + 'SELECT RIGHT(Act_Code,1), '
SET @sql = @sql + '''ACT_TYPE_'' + RIGHT(Act_Code,1) FROM Table_A'
EXEC (@sql)
但它不起作用!
请帮助,非常感谢!
答案 0 :(得分:2)
declare @Foo as Table ( Voot varchar(10), Plevny1 varchar(10), Plevny2 varchar(10) )
insert into @Foo ( Voot, Plevny1, Plevny2 ) values ( 'Thing1', 'a', 'A' ), ( 'Thing2', 'b', 'B' )
select SubString( Voot, 6, 1 ) as Vootette,
case SubString( Voot, 6, 1 )
when '1' then Plevny1
when '2' then Plevny2
else NULL end as Plevny
from @Foo
根据您的具体要求,您可能需要从控制列的值中解析多位整数,可能要处理默认输出值,可能要检查行中的“其他”值为NULL,... 。
答案 1 :(得分:0)
看起来你可以在没有动态SQL的情况下做到这一点:
insert Table_B
(Act, Act_Type)
select case Act_Code
when 'ACT1' then 1
when 'ACT2' then 2
when 'ACT3' then 3
when 'ACT4' then 4
end
, coalesce(ACT_TYPE_1, ACT_TYPE_2, ACT_TYPE_3, ACT_TYPE_4)