1

次の構造の「テーブル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)

しかし、うまくいきません!

助けてください、どうもありがとう!

4

2 に答える 2

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 であることを確認する場合があります。

于 2012-06-30T18:25:14.860 に答える
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)
于 2012-06-30T18:20:15.167 に答える