SQL: llenar una sola fila (tbl 1) a partir de varias filas (tbl 2); DB cruzado
Pregunta
He creado una sola tabla en mi base de datos primaria llamada tblGlobalIDMapping
que asignará un GUID a todas las entradas y almacenará las otras 3 ID principales en la aplicación para proporcionar un único depósito de ID.
La nueva tabla tiene la siguiente estructura: >
AppGlobalID uniqueidentifier NoNulls
PersonID int NoNulls
DRIMaster int Nulls
DRIClient int Nulls
La información que necesito está en una tabla en un DB diferente (mismo servidor) con la siguiente estructura parcial: >
PersonID int NoNulls
ApplicationID tinyint NoNulls
PersonApplicationID varchar(14) NoNulls
Una persona (ID # 13579) está representada en la segunda tabla 1 para cada Solicitud. La columna ApplicationID almacena un número, 1 para DRIMaster y 6 para DRIClient, que le indica para qué sirve el ID # en PersonApplicationID.
Necesito hacer una copia / inserción masiva de esa tabla a mi nueva tabla, pero solo quiero que 1 fila registre las 3 ID principales en la nueva tabla.
Esto es lo que tengo hasta ahora, pero devuelve una fila 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)
Esto devuelve el siguiente - >
PersonID DRIMaster DRIClient
_______________________________
108574 71163 NULL
108574 NULL 71163
Solución
Los agregados ignoran los nulos, así que ...
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