我在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,这给了我一对(尽管是正确的)属性和所有者对。总的来说,我觉得必须有更好的方法来做到这一点。有没有人有任何想法?
答案 0 :(得分:2)
defaultDate:'2016-07-01',