SQL / SSMS - 部分数据从一个表移动到另一个表,具有两个条件

时间:2017-02-14 16:13:09

标签: sql sql-server tsql ssms-2014

好的......我环顾四周,找不到任何可以帮助我解决具体问题的事情。我有一个内容表,我试图将(table1)移动到现有的表(table2)到新创建的列。 表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                  ssands@foo.bar      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 WHEN,但我很挣扎。

1 个答案:

答案 0 :(得分:2)

Pivot table1中的数据,然后更新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