У меня есть таблица в базе данных Oracle 11g, которая выглядит следующим образом:группы Oracle по поворачивающейся
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. В общем, я чувствую, что должно быть лучше способ сделать это. У кого-нибудь есть идеи?
Это сработало отлично, и мне нравится шаблон работы 'input' =>' prep' =>. Хотя я должен признать, что я искал их в течение некоторого времени, думая, что они являются реальными функциями Oracle :) Спасибо! – Rob
lol Надеюсь, вы нашли правильный ответ (предложение WITH, CTE, факторинг подзапроса ...) Я узнал об этом на ранней стадии и теперь использую его все время, это упрощает чтение и чтение запросов. Рад, что это помогло. Ура! – mathguy