0

我需要用不同的列名显示同一张表中的两行。一个作为当前列,另一个作为以前的列。如何在一行中显示它。

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
4

2 回答 2

1

看起来 selfjoin 可能会有所帮助。

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>
于 2019-09-25T20:08:25.717 回答
0

您可以使用 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 提供示例表数据。

于 2019-09-25T20:42:33.490 回答