строки заполнителя sql - PullRequest
       6

строки заполнителя sql

0 голосов
/ 29 августа 2018

У меня есть элемент apex P_USERS, значение которого может быть больше количества строк, возвращаемых из запроса ниже.

У меня есть классический отчет со следующим запросом:

  select 
       first_name,
       last_name
  from  accounts
  where account_role = 'Author'
  order by account_nr;

Я хочу, чтобы строки-заполнители добавлялись в запрос (first_name = null, last_name = null и т. Д.), Если общее количество строк в запросе меньше значения в apex_item P_USERS.

Какие-нибудь советы о том, как этого добиться? Может быть с LEFT join?

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Если у вас результат больше, чем определенные вами минимумы, вы должны добавить остаток с объединением.

Вот что вы можете попробовать адаптировать к вашему случаю:

  SELECT i,c FROM  (
select rownum i, c from (
select  'a' c from dual union all select 'b' from dual union all select 'd' from dual union all select 'be' from dual
)), (Select Rownum r From dual Connect By Rownum <= 3)
where (i(+)= r)
union select i,c from (select rownum i, c from (
select  'a' c from dual union all select 'b' from dual union all select 'd' from dual union all select 'be' from dual
)) where i>3
0 голосов
/ 29 августа 2018

Вы можете попробовать использовать LEFT JOIN.

Сначала создайте список чисел до желаемого предела, например , предложенного здесь :

-- let's say you want 300 records
Select Rownum r From dual Connect By Rownum <= 300

Тогда вы можете использовать это, чтобы присоединиться слева и иметь пустые записи:

SELECT C, R FROM  
  ( select rownum i, c from (select  'a' c from dual union all select 'b' from dual) )
, ( Select Rownum r From dual Connect By Rownum <= 300)
where i(+)= r order by r

Выше приведен упорядоченный список, начинающийся с «a», «b», затем ноль до конца.

Чтобы вы могли адаптировать его к вашему делу так:

SELECT F,L FROM  
  ( select rownum i, f, l from (
             select first_name f, last_name l 
               from  accounts where account_role = 'Author'
            order by account_nr) )
, ( Select Rownum r From dual Connect By Rownum <= 300)
where i(+)= r
...