SQL: Preencher fileira única (TBL 1) a partir de várias linhas (tbl 2); cruz DB
Pergunta
Eu criei uma única tabela no meu DB primária chamada tblGlobalIDMapping
que irá atribuir um GUID a todas as entradas e armazenar os outros 3 primária ID do outro lado da App prever um único repositório ID.
A nova tabela é a seguinte estrutura ->
AppGlobalID uniqueidentifier NoNulls
PersonID int NoNulls
DRIMaster int Nulls
DRIClient int Nulls
A necessidade de informação I está em uma tabela em um DB diferente (mesmo servidor) com a estrutura parcial seguinte ->
PersonID int NoNulls
ApplicationID tinyint NoNulls
PersonApplicationID varchar(14) NoNulls
Uma pessoa (ID # 13579) é representada na segunda tabela 1 para cada aplicação. As lojas de coluna ApplicationID um número, 1 para DRIMaster e 6 para DRIClient, que lhe diz o que o ID # em PersonApplicationID é para.
Eu preciso fazer uma cópia em massa / Inserir dessa tabela à minha nova tabela, mas eu quero gravar o 3 ID principal de na nova tabela apenas 1 linha.
Isto é o que eu tenho até agora, mas este Retorna uma linha para cada 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)
Isso retorna o abaixo ->
PersonID DRIMaster DRIClient
_______________________________
108574 71163 NULL
108574 NULL 71163
Solução
Agregados ignorar valores nulos, então ....
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