需要联合视图中的唯一列

Need unique column in Union View

我有一个训练应用程序,其中我需要两个 table 的联合作为 SQL 服务器中的视图。我的公司有一份编码技能清单。钻孔是代码 10,打磨是代码 30,依此类推。我们工厂根据这些技能代码对员工进行衡量。 为了说明,让我们选择 "Bob"。 Bob 是一名金属精修师,在 EmplSkills tables.

中保持多项技能

其次,在 JobSkills table 中是 "Metal Finisher" 的技能要求。

通过比较两个 table 可以看出 Bob 的技能并不完全符合他作为 Metal Finisher 职位的要求......但它们非常接近。

但是,从 AS9100 质量审核的角度来看,我需要知道到底有多接近。我需要 Bob 的所有符合工作要求的技能 UNION 与 Bob 的所有 extra 不在工作范围内但很好的技能- 与 Bob 的所有 缺失的 技能相结合,这些技能对于立即接受培训非常重要。

所以,我正在使用下面的 SQL 代码在两个 table 上创建联合视图,并且 你可以看到 Bob 可以对金属进行切割和去毛刺......这很好,但是 Bob 在他的工作岗位上没有打磨或刮擦的技能,这非常糟糕。

(SELECT a bunch of columns..., , row_number() over (order by t1.ref_no) as RowNum
   FROM emplskills as t1 
   LEFT OUTER JOIN jobskills as t2 on t1.skill_ID = t2.skill_ID 
  WHERE t2.skill_ID is null)
UNION
(SELECT the same bunch of columns..., , row_number() over (order by t1.ref_no) as RowNum
   FROM jobskills as t2 
   LEFT OUTER JOIN emplskills as t1 on t2.skill_ID = t1.skill_ID 
  WHERE t1.skill_ID is null)
 UNION
(SELECT the same bunch of columns..., , row_number() over (order by t1.ref_no) as RowNum
   FROM emplskills as t1, jobskills AS t2 
  WHERE t1.skill_ID=t2.skill_ID);

我正在使用一个应用程序环境 (Catavolt),其中所有数据 table 都需要至少一个唯一的数据列,它可以远程用作虚拟 "primary key" 来进行自己的管理.所以我需要发明一列唯一值,但我不知道该怎么做。我试过 row_number () over (order by)。我尝试了来自每个来源 table

的两个独特的 ref_no 列
SELECT ... , ((t1.ref_no*100000)+t2.ref_no) as UniqueKey

但是结果中的 NULL 破坏了数学运算,我失去了唯一性。

还有什么我可以补充的吗?值的来源、含义或大小都无关紧要,只要它们是唯一的即可。

TIA, 约翰

编辑:row_number() 上 Tab 的 RowNum 建议超过(按 t1.ref_no 排序)

因为听起来您确实只需要向现有结果中添加一个任意的唯一列,所以很简单:

SELECT *, ROW_NUMBER() OVER (ORDER BY {any column, really, it doesn't matter}) rn
FROM (
  {Your existing query}
) t