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