2017-02-14 11 views
2

Хорошо ... Я огляделся и не нашел ничего, что помогло бы мне решить мою конкретную проблему. У меня есть таблица с содержимым, которое я пытаюсь переместить (таблица1) в существующую таблицу (таблица2) во вновь созданные столбцы. table1:SQL/SSMS - частичные данные перемещаются из одной таблицы в другую с двумя условиями

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     s[email protected]  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, но я изо всех сил.

ответ

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 
+0

Просто любопытно, почему КТР? Не могли бы вы просто поставить аргументы case в обновлении или это не лучшая практика? – manderson

+0

мы не можем добавить эти операторы case в set clause непосредственно .. вместо cte вы можете использовать производную таблицу .. но cte выглядит более читаемым –

+0

Я просто все это построил сам, и теперь понимаю. @Prdp спасибо. – manderson

 Смежные вопросы

  • Нет связанных вопросов^_^