我有一个表,该表具有一些匹配的雇员值,即一个雇员可以在多个部门中。 我想根据它们的“名称”和“ dob”来识别这些记录。如果相同,则将“ id”替换为小数的增量。 在下面的示例中:Mike在2个部门(IT,财务)中工作,因此我希望在最终结果中使用其IT部门ID(以小数的增量表示)。可以在基础部门IT上识别基本ID。
请让我知道我该怎么做?
答案 0 :(得分:1)
让我们用最小ID和行号除以10:
SELECT
MIN(id) OVER(PARTITION BY name, dob) + ((ROW_NUMBER() OVER(PARTITION BY name, dob ORDER BY id)-1)/10 as id,
name,
dob,
department
FROM
emp
我选择了员工的最低编号作为基本编号。如果您有其他策略,例如希望IT部门ID形成基本值,请考虑使用FIRST_VALUE(id) OVER(PARTITION BY ... ORDER BY case when department = 'it' then 0 else 1 end)
我同意蒂姆的看法;您的问题似乎很多,尚不清楚或没有明确考虑或未完全考虑。如果emp在10个部门中工作并且发生id冲突怎么办?通常,我们不在乎ID号是什么,因此我们不会更改它或尝试填补空白等