как использовать различные порядок по выражению в каждом оракуле SQL-запросов в операторе объединения - PullRequest
0 голосов
/ 23 сентября 2018

У меня есть две таблицы TEMP1 и TEMP2 с одинаковым количеством столбцов в обеих таблицах.

  • Temp1- acct_no varchar2 (20), следующий номер, количество количество
  • Temp2 -acct_no varchar2 (20), следующий номер, например, количество

, например, данные из temp1 будут такими:

temp1

acct_no seq amount
200001  1   100
200001  2   50
200001  3   120
200001  4   40

temp2

acct_no seq amount
200001  1001    100
200001  1002    200
200001  1003    80
200001  1004    90

Теперь мое требование - извлечь данные из temp1 и temp2 на основе acct_no, и данные должны быть такими, как показано ниже.Я хочу, чтобы данные сначала извлекались из temp1 с использованием порядка по очереди в порядке убывания, а затем данные должны быть извлечены из temp2 с помощью порядка по последовательности в порядке убывания.Пробовал оператор объединения, но сортировка применяется к окончательному выводу.

seq amount
4   40
3   120
2   50
1   100
1004    90
1003    80
1002    200
1001    100

Ответы [ 2 ]

0 голосов
/ 23 сентября 2018

Вот два слегка разных подхода к этому.Первый применяет ORDER BY к каждой таблице по очереди, ОБЪЕДИНЯЯ результирующие отсортированные наборы результатов вместе:

select seq, amount
  from (select *
          from temp1
          order by seq desc)
union all
  select seq, amount
    from (select *
            from temp2
            order by seq desc);

Второй добавляет идентификатор таблицы к результирующему набору, затем упорядочивает по идентификатору таблицы иSEQ так что выходные результаты упорядочены по желанию:

select seq, amount
  from (select t1.*, 1 as table_index
          from temp1 t1
        union all
       select t2.*, 2 as table_index
          from temp2 t2)
order by table_index asc,
         seq desc;

dbfiddle здесь

0 голосов
/ 23 сентября 2018

Вы должны использовать явный order by для всего набора результатов.Итак, используйте union all для объединения данных, выберите нужные столбцы, а затем используйте соответствующую логику упорядочения:

select seq, amount
from ((select t1.*, 1 as ord
       from temp1 t1
      ) union all
      (select t2.*, 2 as ord
       from temp2 t2
      )
     ) t
order by ord,
         (case when ord = 1 then seq end) desc,
         (case when ord = 2 then seq end) asc;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...