Как отличить один и тот же идентификатор с разными значениями столбца - PullRequest
1 голос
/ 11 июня 2019

Я хочу объединить данные с сервера SQL и Oracle с помощью функции Union, но у меня возникли некоторые проблемы с данными. Выходные данные отображаются с тем же идентификатором и разными значениями столбца.

Я уже попробовал Distinct & Group by, но не могу решить эту проблему.

SELECT DISTINCT binusianid as ID,Name
FROM   (SELECT  binusian_id AS BinusianID, 
                        Upper(nama) AS NAME 
        FROM   hris.hris_db.dbo. master_data_pribadi_pegawai 
        WHERE  stsrc = 'A' 
        UNION 
        SELECT emplid, 
               first_name + ' ' + ( CASE 
                                      WHEN last_name = first_name THEN '' 
                                      ELSE last_name 
                                    END ) AS NAME 
        FROM   Openquery (oracle22, 
'select a.EMPLID,b.FIRST_NAME,b.LAST_NAME  from ps_n_lc_job_info a 
JOIN PS_NAMES b ON b.EMPLID = a.EMPLID 
WHERE a.N_ACTION_CODE NOT IN(''KELUAR'',''MENINGGAL'',''BATAL'',''DROPOUT'')' 
))a 
Group by a.BinusianID,Name

Образец вывода как показано ниже

enter image description here

Спасибо

Ответы [ 2 ]

0 голосов
/ 11 июня 2019

Как сказал @TomC, Union предоставит вам отличную запись ID и имени.Однако проблема здесь с данными. Имя, возвращаемое из Oracle, отличается, но идентификатор тот же.Следовательно, вы получите две записи с одинаковым идентификатором.

enter image description here

Если вы хотите исключить любой из них, вы можете использовать функцию SQL RowNumber().Я создал демо в SQL только для того, чтобы объяснить, как его можно использовать в вашем случае.Я добавил еще одну запись, чтобы объяснить лучше.

enter image description here

Результат - enter image description here

Результатто же самое, имея повторяющиеся строки.Другая запись, которая одинакова как в SQL, так и в Oracle, возвращается уникальной для Union.

Если вы хотите исключить любое использование, как показано ниже.

enter image description here

Демо

0 голосов
/ 11 июня 2019

Во-первых, вам не нужна группа, или DISTINCT, поскольку вы выполняете UNION, который будет автоматически возвращать только отдельные строки.

Во-вторых, если у вас одинаковый идентификатор в двух разных базах данных,есть разные пользователи, то нет возможности выделить их.

Если предполагается, что они содержат одни и те же данные, у вас есть проблема с целостностью данных.

Если у них могут быть перекрывающиеся первичные ключи, то вам нужно добавить столбец DataSource в запрос, чтобы сделать этоони становятся уникальными по ID + Source, а не только по ID.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...