私は2つのテーブルを持っていてTest1
、Corr_table
Test1 テーブル作成スクリプト:
CREATE TABLE [dbo].[Test1](
[id] [bigint] NOT NULL,
[Country] [varchar](3) NULL,
[PeriodKey] [varchar](max) NULL,
[a] [varchar](3) NULL,
[b] [varchar](3) NULL,
[c] [varchar](3) NULL
)
Test1
データ:
id Country PeriodKey a b c
1 E 201201 1 5 9
1 E 201202 1 5 9
3 G 201203 3 7 11
4 H 201204 4 8 12
Corr_table
スクリプトを作成:
CREATE TABLE [dbo].[corr_table](
[Country] [varchar](5) NULL,
[id] [bigint] NULL,
[Field] [varchar](10) NULL,
[Value] [varchar](50) NULL,
[Start_date] [varchar](50) NULL,
[End_date] [varchar](50) NULL
)
corr_table
データ:
Country id Field Value Start_date End_date
E 1 a 4 201201 201202
E 1 b 6 201201 201202
さて、このクエリを書くと、
select
a = case when x.Field = 'a' then x.value else a end,
b = case when x.Field = 'b' then x.value else b end,
y.*
from
dbo.Test1 y,dbo.corr_table x
where
y.id = 1
and y.Country = 'E'
and y.PeriodKey in (201201)
次の結果が得られます。
a b id Country PeriodKey a b c
4 5 1 E 201201 1 5 9
1 6 1 E 201201 1 5 9
一方、私は以下の結果を期待しています:
a b id Country PeriodKey a b c
4 6 1 E 201201 1 5 9
両方の列が単一の行で更新されないのはなぜですか? 一度に1つの列のみを更新していますが、両方の列を更新する必要があります
つまり、a は 4、b は 6 を 1 行に並べる必要があります。しかし、1つだけ更新するのはなぜですか?