2017-02-14 16 views
2

Ok ...私は周りを見回し、私の特定の問題を解決するのに役立つものは何も見つかりませんでした。私は、新しく作成された列に既存のテーブル(table2)に移動しようとしている内容のテーブル(table1)を持っています。 TABLE1:SQL/SSMS - 2つの条件で1つのテーブルから別のテーブルにデータを部分的に移動する

CNTC_COMM_TYP_ID CNTC_COMM_VAL CNTC_ID COMM_TYP_ID 
14     406-444-1104  4  1 
15     406-443-2127  4  4 
16     [email protected]  4  3 
17     406-338-2181  16  1 
18     406-338-7127  16  4 

表2:

CNTC_ID CNTC_NM  ST_ENTY_ID TRBL_ID WorkPhone CellPhone Email Fax 
1  Poole, Andy  10  NULL NULL   NULL NULL NULL 
2  Goodwin, Annie NULL  5 NULL   NULL NULL NULL 

私は適切な列に値を分離しているとのトラブルを抱えています問題。

WHERE table1.CNTC_ID = table2.CNTC_ID 

と::私が探しているようなものである

IF (GAIN_CNTC_COMM_TYP.CNTC_TYP_ID= 1) { 
    SET WorkPhone = table1.CNTC_COMM_VAL 
} 
ELSE IF (table1.CNTC_TYP_ID= 2) { 
    SET CellPhone = table1.CNTC_COMM_VAL 
} 
ELSE IF (table1.CNTC_TYP_ID= 3) { 
    SET Email = table1.CNTC_COMM_VAL 
} 
ELSE IF (table1.CNTC_TYP_ID = 4) 
    SET Fax = GAIN_CNTC_COMM_TYP.CNTC_COMM_VAL 
} 

私は一緒にSQLでCASEを入れて試してみたが、私は苦労しています。

答えて

2

Pivottable1内のデータ、その後、興味があるだけtable2

;with cte as 
(
select CNTC_ID, 
     WorkPhone=max(case when COMM_TYP_ID = 1 then CNTC_COMM_VAL end), 
     CellPhone=max(case when COMM_TYP_ID = 2 then CNTC_COMM_VAL end), 
     Email=max(case when COMM_TYP_ID = 3 then CNTC_COMM_VAL end), 
     Fax=max(case when COMM_TYP_ID = 4 then CNTC_COMM_VAL end) 
From Yourtable 
Group by CNTC_ID 
) 
UPDATE t2 
SET WorkPhone = c.WorkPhone, 
     CellPhone = c.CellPhone, 
     Email = c.Email, 
     Fax = c.Fax 
FROM table2 t2 
     JOIN cte c 
     ON t2.CNTC_ID = c.CNTC_ID 
+0

、なぜCTEを更新?ケースステートメントをアップデートに入れるだけでいいですか、それともベストプラクティスではありませんか? – manderson

+0

これらのcase文をset節に直接追加することはできません。cteの代わりに派生テーブル..を使用することはできますが、もっと読みやすくなります。 –

+0

自分で作成したばかりです。 @Prdpありがとう。 – manderson

関連する問題