SQL: remplir une seule ligne (tbl 1) à partir de plusieurs lignes (tbl 2); cross DB
Question
J'ai créé une seule table dans ma base de données principale appelée tblGlobalIDMapping
, qui affectera un GUID à toutes les entrées et stockera les 3 autres ID principaux dans l'application pour fournir un référentiel d'identifiant unique.
La nouvelle table est dans la structure suivante - >
AppGlobalID uniqueidentifier NoNulls
PersonID int NoNulls
DRIMaster int Nulls
DRIClient int Nulls
Les informations dont j'ai besoin sont dans une table dans une base de données différente (même serveur) avec la structure partielle suivante - >
PersonID int NoNulls
ApplicationID tinyint NoNulls
PersonApplicationID varchar(14) NoNulls
Une personne (numéro d’identification 13579) est représentée dans le deuxième tableau 1 pour chaque application. La colonne ApplicationID stocke un numéro, 1 pour DRIMaster et 6 pour DRIClient, qui indique le numéro d'identification de PersonApplicationID.
Je dois effectuer une copie / insertion en bloc de cette table vers ma nouvelle table, mais je ne souhaite qu'une ligne pour enregistrer les 3 identifiants principaux de la nouvelle table.
C’est ce que j’ai eu jusqu’à présent, mais cela renvoie une ligne pour chaque identifiant personnel.
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)
Ceci renvoie le texte ci-dessous - >
PersonID DRIMaster DRIClient
_______________________________
108574 71163 NULL
108574 NULL 71163
La solution
Les agrégats ignorent les valeurs NULL, donc ....
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