Im пытается вставить данные из одной базы данных в другую. Это то, что я до сих пор, на избранной стороне:TSQL - несколько значений в INSERT (из-за объединений)
USE [db2]
SELECT
sP.pers_FirstName
,sp.pers_LastName
,sPH.Phon_Number
,CASE WHEN LEFT(sPH.Phon_Number, 2) = '04' THEN sPH.Phon_number ELSE NULL END
,CASE WHEN sp.pers_gender = 1 THEN 'M' WHEN sp.pers_gender = 2 THEN 'F' ELSE 'U' END
,CASE
WHEN sP.pers_salutation = '10' THEN 8
WHEN sp.pers_salutation = '6' THEN 2
WHEN sp.pers_salutation = '7' THEN 1
WHEN sp.pers_salutation = '8' THEN 4
WHEN sp.pers_salutation = '9' THEN 5
WHEN sp.pers_salutation = 'APROF' THEN 6
WHEN sp.pers_salutation = 'Ms.' THEN 4
WHEN sp.pers_salutation = 'PROF' THEN 6
END
,sp.pers_dob
,sp.pers_CreatedDate
,sp.pers_UpdatedDate
,'Candidate'
,1
,e.Emai_EmailAddress
,sP.pers_personID
FROM [db1].dbo.person sP
LEFT JOIN [db1].dbo.PhoneLink sPL ON sp.pers_personID = sPL.PLink_recordID
LEFT JOIN [db1].dbo.Phone sPH ON sPL.PLink_PhoneId = sPH.Phon_PhoneID
LEFT JOIN [db1].dbo.EmailLink eL ON sP.pers_personID = eL.ELink_RecordID
LEFT JOIN [db1].dbo.Email e ON eL.Elink_EmailID = e.Emai_EmailID
WHERE
(
sP.pers_employedby NOT IN (
'Aspen'
,'ACH'
)
)
OR
(
sP.pers_employedby IN (
'Aspen'
,'ACH'
)
AND sP.pers_personID NOT IN (
SELECT c.oppo_PrimaryPersonID FROM [SageCRM].dbo.Opportunity c
WHERE (c.oppo_contractcompleted <= '2016-01-01' OR c.oppo_contractterminated <= '2016-01-01') and c.Oppo_Deleted is null)
AND
sp.pers_isanemployee != 'ECHO'
AND sP.pers_personID IN (
SELECT c.oppo_PrimaryPersonID FROM [SageCRM].dbo.Opportunity c
WHERE c.oppo_Status != 'In Progress' OR c.oppo_Status = 'Completed')
AND sP.pers_dod IS NULL
AND sP.pers_FirstName NOT LIKE '%test%'
AND sP.pers_LastName NOT LIKE '%test%'
AND sp.pers_isanemployee != 'SalesContact'
)
В связи с тем, что каждый человек запись может иметь несколько телефонных номеров, связанных с ними, я в конечном итоге с несколькими записями для каждого человека, который, очевидно, привычка работа, так как в конце концов я получаю дубликаты, когда я действительно вставляю данные.
Проблема в том, что мне нужно иметь все номера телефонов для каждой записи, просто отображаемые в другом поле (домашний телефон, рабочий телефон, мобильный телефон).
Любые идеи, кроме этого, в отдельной инструкции вставки для каждой телефонной/электронной почты?
-------- РЕДАКТИРОВАТЬ: ------------------------------------ -----------------------------
Итак, я плохо знаю, что не дал вам достаточно информации. Оба ваших ответа были хорошими ответами, поэтому спасибо за это (@Horaciux, @John Wu).
Однако, нет столбец phoneType, только номер телефона. Тем не менее, поскольку каждый мобильный телефон начинается с 04 и каждого домашнего телефона с чем-либо еще, я могу довольно легко различать два типа телефона.
В телефоне есть дубликаты, поэтому мне придется удалить их, скорее всего, через CTE, не должно быть слишком сложно.
Итак, я в конечном итоге с чем-то вроде этого в течение двух телефонных номеров:
SELECT (phon_number FROM phone p INNER JOIN PhoneLink p1 on p1.PhoneLinkID = p.PhoneLink WHERE LEFT(p.Phon_Number, 2) = '04')
SELECT (phon_number FROM phone p INNER JOIN PhoneLink p1 on p1.PhoneLinkID = p.PhoneLink WHERE LEFT(p.Phon_Number, 2) != '04')
Мое удаление дубликатов будет что-то вроде этого:
WITH CTE AS
(
SELECT phon_linkID, phon_phonNumber, ROW_NUMBER() OVER (PARTITION BY phon_phonNumber ORDER BY phon_linkID) AS RN
FROM phone
)
DELETE FROM CTE WHERE RN<>1
Как классифицировать список телефонных номеров в различных областях (домашний телефон/рабочий телефон ..)? – ydoow
Добавить структуру таблицы на ваш пост. Это возможно по-другому, если вы заботитесь о производительности. – Horaciux