Oracle group by和pivot

时间:2016-08-03 18:11:38

标签: oracle pivot

我在Oracle 11g数据库中有一个表,如下所示:

ownerid | propertyid | name
--------------------------------------
1       | 1000001    | SMITH MARY
2       | 1000001    | SMITH JOHN
3       | 1000002    | HUGHES JANE
4       | 1000003    | CHEN ALICE
5       | 1000003    | MCCOY ELLIS

我正在尝试对propertyid上的表进行分组,并将行转移到列,使其如下所示:

propertyid | owner1         | owner2
---------------------------------------------
10001      | SMITH MARY     | SMITH JOHN
10002      | HUGHES JANE    | <null>
10003      | CHEN ALICE     | MCCOY ELLIS

每个属性可以包含1到3个所有者,但我只对前两个属性感兴趣,因为它们在ownerid上订购时显示。

我最好的解决方案是创建两个子查询:一个是“第一”所有者,另一个是“第二个”所有者。我使用了nth_value函数,如下所示:

-- first owners
select 
  propertyid,
  nth_value(name, 1) over (partition by propertyid order by ownerid) as owner_1
from owners

但是如果所有者的总数大于1,这给了我一对(尽管是正确的)属性和所有者对。总的来说,我觉得必须有更好的方法来做到这一点。有没有人有任何想法?

1 个答案:

答案 0 :(得分:2)

defaultDate:'2016-07-01',