显示不同 Badge_ID

Display distinct Badge_ID

这是我的查询,当前结果如下所示。

SELECT 
    Distinct CONVERT(int, Employees_1.Emp_Badge_No) AS Emp_Badge_No,
    Employees_1.Emp_LastName, Employees_1.Emp_FirstName, Employees_1.Email,
    Employees_1.NT_Name, Employees_1.Dept_key,
    Employees_1.Emp_LastName + ',' + Employees_1.Emp_FirstName AS FullName,
    dbo.department_vw.DepartmentShortName AS deptname, 
    Employees_1.active_flag
FROM data_common.dbo.employees_union_vw AS Employees_1
INNER JOIN dbo.department_vw
    ON Employees_1.Dept_key = dbo.department_vw.DepartmentKey

示例数据:

我需要帮助才能实现预期结果。我将使用现有的 sql 查询修改什么? 我想保留所有记录,即使它处于非活动状态,只要 Emp_Badge_No 不重复即可。我只想删除那些重复的 Emp_Badge_No。

提前致谢。

您可能需要为此使用 ROW_NUMBER。根据要从重复条目中检索的行修改 ORDER BY 子句:

WITH Cte AS(
    SELECT 
       e.Emp_Badge_No,
       e.Emp_LastName, 
       e.Emp_FirstName,
       e.Email,
       e.NT_Name, 
       e.Dept_key, 
       e.Emp_LastName + ',' + e.Emp_FirstName AS FullName,
       d.DepartmentShortName AS deptname, 
       e.active_flag,
       rn = ROW_NUMBER() OVER(PARTITION BY e.Emp_Badge_No ORDER BY e.Active)
    FROM data_common.dbo.employees_union_vw AS e
    INNER JOIN dbo.department_vw d
        ON e.Dept_key = d.DepartmentKey
)
SELECT
    Emp_Badge_No,
    Emp_LastName, 
    Emp_FirstName,
    Email,
    NT_Name, 
    Dept_key, 
    FullName,
    deptname, 
    active_flag
FROM Cte
WHERE rn = 1

以上如果有重复会得到Inactive记录。如果您想获取活动记录,请将 rn 替换为:

ROW_NUMBER() OVER(PARTITION BY Emp_Badge_No ORDER BY e.Active DESC)

如果您不关心它是活跃还是不活跃,请将 rn 替换为:

ROW_NUMBER() OVER(PARTITION BY Emp_Badge_No ORDER BY (SELECT NULL))