从具有重复项的非规范化 table 中选择活动角色

Selecting Active roles from denormalized table with duplicates

我有一些垃圾 table 需要从中提取数据。

 Name        | Person# | Assignment_Status | Group
 --------------------------------------------------
 Smith, John | 1234567 | NLE               | G1
 Smith, John | 1234567 | Active            | G2
 Jones, Jane | 7654321 | Active            | G1
 James, Jack | 9876541 | LOA               | G3
 Peep, Laura | 6549871 | ServiceLOA        | G1
 Some, One   | 3219875 | NLE               | G2

每次有人移动组时,他们当前的 assignment_status 都会设置为 NLE,并且会创建一个新记录以将新组的 assignment_status 设置为 Active。当一个人离开公司时,他们也会将 assignment_status 设置为 NLE。此 table 没有唯一行 ID,也没有日期戳。

我需要一个查询,将每个员工的 table 减少到 1 个记录,如果员工有多个记录,我需要 Assignment_Status 不是 NLE。例如,John Smith 应该显示为 G2 活跃。

我的第一次尝试是:

 SELECT *
 INTO #TempAssignments
 FROM
    (SELECT 
       ROW_NUMBER() OVER (ORDER BY aID) AS ID,
       Name,
       Person#,
       (CASE WHEN Assignment_Status='NLE' THEN 1 ELSE 0 END) AS aID,
       Group
     FROM
       tblAssignments)

使用临时数据 table 然后我创建了第二个查询 select ID 的 MIN、aID 的 MIN 和 GROUP BY Name 和 Person# 然后将其连接回temp table 获取给定 ID 的组。

这似乎可行,但这是一个需要在多个报告中部署的解决方案,所以我想知道是否有更紧凑的方法来执行此操作。

以下查询:

SELECT Name, Person#, [Group]
FROM (
  SELECT Name, Person#, [Group],
         ROW_NUMBER() OVER (PARTITION BY Person#, Name 
                            ORDER BY CASE 
                                      WHEN Assignment_Status <> 'NLE' THEN 0 
                                      ELSE 1 
                                     END) AS rn
   FROM tblAssignments ) t
WHERE t.rn = 1

将为每位员工 select 一条记录,由 Person#, Name 值对标识。如果该员工有多个记录,则 Assignment_Status 而非 NLE 的记录将被 select 编辑。