SQL/SSMS-部分数据在两个条件下从一个表移动到另一个表

SQL/SSMS-部分数据在两个条件下从一个表移动到另一个表,sql,sql-server,tsql,ssms-2014,Sql,Sql Server,Tsql,Ssms 2014,好的……我已经四处查看,没有发现任何有助于我解决具体问题的东西。我有一个表,其中的内容是我试图将(表1)移动到现有表(表2)中的新创建列中。 表1: 表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

好的……我已经四处查看,没有发现任何有助于我解决具体问题的东西。我有一个表,其中的内容是我试图将(表1)移动到现有表(表2)中的新创建列中。 表1:

表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
以及:


在SQL中,我尝试过整理一个案例,但我很挣扎。

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 

只是好奇,为什么是CTE?您不能将case语句放在更新中,或者这不是最佳做法吗?我们不能直接在set子句中添加这些case语句。。您可以使用派生表代替cte。。但是cte看起来更容易阅读,我只是自己构建了它,现在我明白了@Prdp谢谢。@Prdp-非常感谢!工作得很好。我以前从未用过CTE…我的大脑刚刚长了一个大。
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
}
;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