Поиск в службах SSIS несколько столбцов в одной таблице для одного столбца идентификатора в другой - PullRequest
1 голос
/ 26 мая 2019

У меня есть следующая таблица:

EventValue | Person1           | Person2    | Person3     | Person4       | Meta1  | Meta2 
-------------------------------------------------------------------------------------------
123        | joePerson01       | samRock01  | nancyDrew01 | steveRogers01 | 505   | 606
321        | steveRogers02     | yoMama01   | ruMo01      | lukeJedi01    | 707   | 808

Я хочу преобразовать столбцы Person в идентификаторы для моей таблицы назначения, чтобы все идентификаторы приходили из одной и той же таблицы Person в моем назначенииDB:

ID | FirstName | LastName  | DatabaseOneID | DatabaseTwoID
----------------------------------------------------------
1  | Joe       | Person    | joePerson01   | personJoe01
2  | Sam       | Rockwell  | samRock01     | rockSam01
3  | Nancy     | Drew      | nancyDrew01   | drewNancy01
4  | Steve     | Rogers    | steveRogers01 | rogersSteve01
5  | Steve R   | Rogers    | steveRogers02 | rogersSteve02
6  | Yo        | Mama      | yoMama01      | mamaYo01
7  | Rufus     | Murdock   | ruMo01        | moRu01
8  | Luke      | Skywalker | lukeJedi01    | jediLuke01

С такими результатами:

MetaID     | EventValue | Person1ID | Person2ID | Person3ID | Person4ID
------------------------------------------------------------------------
1          | 123        | 1         | 2         | 3         | 4
2          | 321        | 5         | 6         | 7         | 8

У меня в настоящее время есть преобразование «Уточняющий запрос» при поиске первого столбца «Человек», но я не могу понять, как преобразовать все 4 человека.столбцы в идентификаторы в том же поиске.

Ответы [ 2 ]

0 голосов
/ 27 мая 2019

В настоящее время у меня есть преобразование «Уточняющий запрос», в котором выполняется поиск первого столбца «Персона», но я не смог выяснить, как преобразовать все столбцы «4 персоны» в идентификаторы в одном и том же поиске.

Вы не можетесделать это в том же поиске, вы должны добавить преобразование «Уточняющий запрос» для каждого столбца .В вашем случае вы должны добавить 4 Lookup Transformation.


Если исходная база данных и база данных назначения находятся на одном сервере, вы можете использовать запрос SQL для достижения этого, как указано в другом ответе, но вВ случае, если каждая база данных находится на отдельном сервере, вы должны использовать преобразование «Уточняющий запрос» или импортировать данные в промежуточную таблицу и выполнять операции объединения с использованием SQL.

0 голосов
/ 26 мая 2019

Вы можете сделать это в одном запросе, или использовать UNPIVOT, или использовать скалярную функцию, если считаете, что это будет более исправимо для вашей реализации.Затем вы просто создаете представление, в котором вам будет легко получить доступ.

вот краткий пример:

DECLARE 
    @tb1 TABLE 
(
    EventValue INT
, Person1 VARCHAR(250)
, Person2 VARCHAR(250)
, Person3 VARCHAR(250)
, Person4 VARCHAR(250)
, Meta1 INT 
, Meta2 INT 
)

DECLARE 
    @Person TABLE 
(
    ID INT 
,   FirstName VARCHAR(250)
,   LastName  VARCHAR(250)
,   DatabaseOneID VARCHAR(250)
,   DatabaseTwoID VARCHAR(250)
)


INSERT INTO @tb1 
VALUES 
(123,'joePerson01','samRock01','nancyDrew01','steveRogers01',505,606),
(321,'steveRogers02','yoMama01','ruMo01','lukeJedi01',707,808)


INSERT INTO @Person 
VALUES 
(1,'Joe','Person','joePerson01','personJoe01'),
(2,'Sam','Rockwell','samRock01','rockSam01'),
(3,'Nancy','Drew','nancyDrew01','drewNancy01'),
(4,'Steve','Rogers','steveRogers01','rogersSteve01'),
(5,'SteveR','Rogers','steveRogers02','rogersSteve02'),
(6,'Yo','Mama','yoMama01','mamaYo01'),
(7,'Rufus','Murdock','ruMo01','moRu01'),
(8,'Luke','Skywalker','lukeJedi01','jediLuke01')

SELECT ROW_NUMBER() OVER(ORDER BY EventValue) AS MetaID, *
FROM (
    SELECT 
        t.EventValue 
    ,   MAX(CASE WHEN t.Person1 IN(p.DatabaseOneID, p.DatabaseTwoID) THEN p.ID ELSE NULL END) AS Person1ID
    ,   MAX(CASE WHEN t.Person2 IN(p.DatabaseOneID, p.DatabaseTwoID) THEN p.ID ELSE NULL END) AS Person2ID
    ,   MAX(CASE WHEN t.Person3 IN(p.DatabaseOneID, p.DatabaseTwoID) THEN p.ID ELSE NULL END) AS Person3ID
    ,   MAX(CASE WHEN t.Person4 IN(p.DatabaseOneID, p.DatabaseTwoID) THEN p.ID ELSE NULL END) AS Person4ID
    FROM @tb1 t
    LEFT JOIN @Person p 
        ON p.DatabaseOneID IN(t.Person1, t.Person2, t.Person3, t.Person4)
        OR p.DatabaseTwoID IN(t.Person1, t.Person2, t.Person3, t.Person4)
    GROUP BY t.EventValue
) D 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...