我想加入一个包含少量行的表,其中一行具有更多行,而不是重复小表的行。
例如:
people:
person_id name
--------- ----
1 Dave
2 Sam
jobs:
job_id change_date person_id
------ ----------- ---------
1 01-01-2013 1
2 01-01-2014 1
3 01-01-2013 2
4 01-01-2014 2
select p.name,
j.job_id,
j.change_date
from people p,
jobs j
where j.person_id = p.person_id
返回:
name job_id change_date
---- ------ -----------
Dave 1 01-01-2013
Dave 2 01-01-2014
Sam 3 01-01-2013
Sam 4 01-01-2014
我想:
name job_id change_date
---- ------ -----------
Dave 1 01-01-2013
2 01-01-2014
Sam 3 01-01-2013
4 01-01-2014
这可以使用Oracle SQL吗?
答案 0 :(得分:1)
select case when row_number() over (partition by p.name order by j.change_date) = 1 then p.name else NULL end as name,
j.job_id,
j.change_date
from people p,
jobs j
where j.person_id = p.person_id
order by p.name, j.change_date;
您可以使用分析函数ROW_NUMBER来计算相同的名称,并仅显示第一个名称。但是你需要订购你的结果。
答案 1 :(得分:1)
Row_number可用于获取序列号然后可以使用案例为序列的人名提供空名称> 1
还将其更改为使用显式连接
Select ( case when seq=1 then name else '' end ) as name,
job_id,
Change_date
From (
Select p.name,
j.job_id,
j.change_date,
Row_number() over ( partition by p.person_id order by job_id desc) as seq
from people p
Join jobs j
On j.person_id = p.person_id) T