如何使用不同的列值区分相同的ID

时间:2019-06-11 02:07:27

标签: sql sql-server

我想使用Union函数从SQL Server和Oracle联接数据,但是我在数据方面遇到一些麻烦。显示的输出具有相同的ID和不同的列值。

我已经尝试过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 :(得分:0)

首先,您在执行UNION时不需要分组依据或DISTINCT,因为UNION只会自动返回不同的行。

第二,如果您在具有不同用户的两个不同数据库中具有相同的ID,则无法区分它们。

如果两者应该包含相同的数据,那么您将遇到数据完整性问题。

如果它们的主键可以重叠,那么您需要在查询中添加一个DataSource列,以确保它们在ID + Source上变得唯一,而不仅仅是ID。

答案 1 :(得分:0)

正如@TomC Union所说,它将为您提供ID和Name的不同记录。 但是,这里的问题与数据有关,从Oracle返回的名称不同,但ID相同。因此,您将获得两条具有相同ID的记录。

enter image description here

如果您希望消除其中任何一个,可以使用SQL RowNumber()函数。 我已经在SQL中创建了一个演示程序,目的只是为了解释如何在您的情况下使用它。 我又添加了一条记录以更好地解释。

enter image description here

结果- enter image description here

具有重复的行的结果相同。在SQL和Oracle中相同的另一条记录由Union唯一返回。

如果您希望消除以下任何一种用途。

enter image description here

Demo