Как написать запрос для отображения двух строк в одной строке из одной таблицы с разными именами столбцов псевдонимов с помощью оракула - PullRequest
0 голосов
/ 25 сентября 2019

Мне нужно отобразить две строки из одной таблицы с разными именами столбцов.один как Текущие столбцы, а другой как предыдущие столбцы.Как отобразить его в один ряд.

SELECT BILL_ID CUR_BILL_ID, BILL_START_DT CUR_BILL_START_DT, BILL_END_DT CUR_BILL_END_DT, BILL_STATUS_CD CUR_BILL_STATUS_CD, BILL_APPROVED_BY CUR_BILL_APPROVED_BY, BILL_APPROVED_DT CUR_BILL_APPROVED_DT FROM FPM_CB_BILL_DETAILS WHERE BILL_ID =  (select max(BILL_ID) from FPM_CB_BILL_DETAILS)


SELECT BILL_ID PRV_BILL_ID, BILL_START_DT PRV_BILL_START_DT, BILL_END_DT PRV_BILL_END_DT, BILL_STATUS_CD PRV_BILL_STATUS_CD,  BILL_APPROVED_BY PRV_BILL_APPROVED_BY,  BILL_APPROVED_DT PRV_BILL_APPROVED_DT FROM FPM_CB_BILL_DETAILS WHERE BILL_ID =  (select max(BILL_ID) from FPM_CB_BILL_DETAILS) - 1

Ответы [ 2 ]

1 голос
/ 25 сентября 2019

Похоже, что самостоятельное соединение может помочь.

SQL> with fpm_cb_bill_Details (bill_id, bill_status_cd) as
  2    (select 100, 'status A' from dual union all
  3     select 101, 'status B' from dual union all
  4     select 102, 'statuc C' from dual union all
  5     select 103, 'status D' from dual
  6    )
  7  select a.bill_id         curr_bill_id,
  8         a.bill_status_cd  curr_status,
  9         b.bill_id         prev_bill_id,
 10         b.bill_status_cd  prev_status
 11  from fpm_cb_bill_details a join fpm_cb_bill_details b on b.bill_id = a.bill_id - 1
 12  where a.bill_id = (select max(bill_id) from fpm_cb_bill_details);

CURR_BILL_ID CURR_STA PREV_BILL_ID PREV_STA
------------ -------- ------------ --------
         103 status D          102 statuc C

SQL>
0 голосов
/ 25 сентября 2019

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

FSITJA@db01> with fpm_cb_bill_Details (bill_id, bill_status_cd) as
  2   (select 100, 'status A' from dual union all
  3    select 101, 'status B' from dual union all
  4    select 102, 'statuc C' from dual union all
  5    select 103, 'status D' from dual
  6   )
  7   select d.bill_id         curr_bill_id,
  8          d.bill_status_cd  curr_status,
  9          lag(d.bill_id)        over (order by d.bill_id) prev_bill_id,
 10          lag(d.bill_status_cd) over (order by d.bill_id) prev_status
 11     from fpm_cb_bill_Details d;

CURR_BILL_ID CURR_STA PREV_BILL_ID PREV_STA
------------ -------- ------------ --------
         100 status A
         101 status B          100 status A
         102 statuc C          101 status B
         103 status D          102 statuc C

Спасибо @Littlefoot за данные таблицы выборки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...