Oracle sql如何加入行数较多的少量行而不重复小行

时间:2014-11-06 13:41:08

标签: sql oracle

我想加入一个包含少量行的表,其中一行具有更多行,而不是重复小表的行。

例如:

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吗?

2 个答案:

答案 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