SQL: popolare singola riga (tbl 1) da più righe (tbl 2); cross DB
Domanda
Ho creato una singola tabella nel mio DB principale chiamata tblGlobalIDMapping
che assegnerà un GUID a tutte le voci e memorizzerà gli altri 3 ID primari sull'App per fornire un repository di ID singolo.
La nuova tabella è nella seguente struttura - >
AppGlobalID uniqueidentifier NoNulls
PersonID int NoNulls
DRIMaster int Nulls
DRIClient int Nulls
Le informazioni di cui ho bisogno sono in una tabella in un diverso DB (stesso server) con la seguente struttura parziale - >
PersonID int NoNulls
ApplicationID tinyint NoNulls
PersonApplicationID varchar(14) NoNulls
Una persona (ID # 13579) è rappresentata nella seconda tabella 1 per ogni Applicazione. La colonna ApplicationID memorizza un numero, 1 per DRIMaster e 6 per DRIClient, che indica a cosa serve l'ID # in PersonApplicationID.
Devo fare una copia / inserimento in blocco da quella tabella alla mia nuova tabella, ma voglio solo 1 riga per registrare i 3 ID principali nella nuova tabella.
Questo è quello che ho finora, ma questo restituisce una riga per ogni 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)
Questo restituisce quanto segue - >
PersonID DRIMaster DRIClient
_______________________________
108574 71163 NULL
108574 NULL 71163
Soluzione
Gli aggregati ignorano i null, quindi ....
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