SQL: заполнить одну строку (таблица 1) из нескольких строк (таблица 2); кросс БД
Вопрос
Я создал одну таблицу в моей основной БД под названием tblGlobalIDMapping
, которая назначит GUID для всех записей и сохранит 3 других основных идентификатора в приложении, чтобы обеспечить один репозиторий идентификаторов. р>
Новая таблица имеет следующую структуру - > Р>
AppGlobalID uniqueidentifier NoNulls
PersonID int NoNulls
DRIMaster int Nulls
DRIClient int Nulls
Информация, которая мне нужна, находится в таблице в другой БД (на том же сервере) со следующей частичной структурой - >
PersonID int NoNulls
ApplicationID tinyint NoNulls
PersonApplicationID varchar(14) NoNulls
Человек (ID # 13579) представлен во второй таблице 1 для каждого приложения. В столбце ApplicationID хранится число: 1 для DRIMaster и 6 для DRIClient, в котором указано, для чего предназначен ID # в PersonApplicationID. Р>
Мне нужно сделать групповое копирование / вставку из этой таблицы в мою новую таблицу, но я хочу, чтобы только 1 строка записывала 3 основных идентификатора в новой таблице. Р>
Это то, что у меня есть, но возвращает строку для каждого PersonID.
SELECT PersonID,
CASE
WHEN ApplicationID = 1
THEN PersonApplicationID
END AS 'DRIMaster',
CASE
WHEN ApplicationID = 6
THEN PersonApplicationID
END AS 'DRIClient'
FROM tblApplicationAssociation
WHERE ApplicationID IN (1,6)
Это возвращает ниже - >
PersonID DRIMaster DRIClient
_______________________________
108574 71163 NULL
108574 NULL 71163
Решение
Агрегаты игнорируют нули, поэтому ....
SELECT PersonID,
Min(CASE
WHEN ApplicationID = 1
THEN PersonApplicationID
END) AS 'DRIMaster',
Min(CASE
WHEN ApplicationID = 6
THEN PersonApplicationID
END) AS 'DRIClient'
FROM tblApplicationAssociation
WHERE ApplicationID IN (1,6)
Group By PersonId