SQL/SSMS - 部分数据在两个条件下从一个 table 移动到另一个
SQL/SSMS - partial data move from one table to another with two conditions
好的...我环顾四周,没有找到任何可以帮助我解决我的具体问题的东西。我有一个 table,其中包含我正在尝试将 (table1) 移动到现有 table (table2) 到新创建的列中的内容。
table1:
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
table2:
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 中整理一个案例,但我很挣扎。
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
好的...我环顾四周,没有找到任何可以帮助我解决我的具体问题的东西。我有一个 table,其中包含我正在尝试将 (table1) 移动到现有 table (table2) 到新创建的列中的内容。 table1:
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
table2:
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 中整理一个案例,但我很挣扎。
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