SQL: заполнить одну строку (таблица 1) из нескольких строк (таблица 2); кросс БД

StackOverflow https://stackoverflow.com/questions/1201128

  •  05-07-2019
  •  | 
  •  

Вопрос

Я создал одну таблицу в моей основной БД под названием 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top