针对每个唯一 ID 显示每个唯一名称 - 分区结束了吗?
Show each unique name against each unique ID - partition over?
我在下面模拟了我的数据:
Job_ID Employee
1 Tim
1 John
1 Tim
2 Dave
我想 return:
Job_ID Employee
1 Tim
1 John
2 Dave
作业 ID 1 现在有两个条目,因为该作业有两个员工。
我希望这可以通过 PARTITION BY 实现:
SELECT job_id, employee OVER (PARTITION BY employee)
from data
但我想我误解了在这种情况下如何使用它?
你可以只使用 GROUP BY
:
SELECT job_id, employee
FROM data
GROUP BY job_id, employee
甚至只是一个 SELECT DISTINCT
:
SELECT DISTINCT job_id, employee
FROM data
简单的解决方案:
select distinct job_id, employee
from emp_job
order by job_id, employee ;
分区:
select d1.job_id, d1.employee
from
(SELECT job_id, employee,
row_number() OVER (partition by job_id, employee
order by employee) as rnk
from data
)d1
where d1.rnk = 1
在 Teradata 中分区:
SELECT job_id, employee
from emp_job
qualify row_number() OVER (partition by job_id, employee
order by data) = 1;
我在下面模拟了我的数据:
Job_ID Employee
1 Tim
1 John
1 Tim
2 Dave
我想 return:
Job_ID Employee
1 Tim
1 John
2 Dave
作业 ID 1 现在有两个条目,因为该作业有两个员工。
我希望这可以通过 PARTITION BY 实现:
SELECT job_id, employee OVER (PARTITION BY employee)
from data
但我想我误解了在这种情况下如何使用它?
你可以只使用 GROUP BY
:
SELECT job_id, employee
FROM data
GROUP BY job_id, employee
甚至只是一个 SELECT DISTINCT
:
SELECT DISTINCT job_id, employee
FROM data
简单的解决方案:
select distinct job_id, employee
from emp_job
order by job_id, employee ;
分区:
select d1.job_id, d1.employee
from
(SELECT job_id, employee,
row_number() OVER (partition by job_id, employee
order by employee) as rnk
from data
)d1
where d1.rnk = 1
在 Teradata 中分区:
SELECT job_id, employee
from emp_job
qualify row_number() OVER (partition by job_id, employee
order by data) = 1;