首页 > 解决方案 > 如何区分具有不同列值的相同ID

问题描述

我想使用 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

输出样本如下

在此处输入图像描述

谢谢

标签: sqlsql-server

解决方案


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

在此处输入图像描述

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

在此处输入图像描述

结果 - 在此处输入图像描述

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

如果您想消除任何一种用途,如下所示。

在此处输入图像描述

演示


推荐阅读