加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

需要显示一个虚拟月份 – Oracle SQL

发布时间:2021-03-16 06:42:32 所属栏目:站长百科 来源:网络整理
导读:对于月费报告目的,需要显示如下所述的输出.只有当月支付费用时才会在表格中输入数据,否则表格中不会显示该月份. 执行查询 select reg_id,dop,to_char(dop,'FMMonth,YYYY') Month,status from fees_status where dop between ('1-Jul-2012') and ('1-Dec-2012

对于月费报告目的,需要显示如下所述的输出.只有当月支付费用时才会在表格中输入数据,否则表格中不会显示该月份.

执行查询

select reg_id,dop,to_char(dop,'FMMonth,YYYY') Month,status 
  from fees_status
 where dop between ('1-Jul-2012') and ('1-Dec-2012')

输出是

REG_ID  DOP         MONTH           STATUS

AE-8    7/1/2012    July,2012       PAID
AE-8    9/1/2012    September,2012  PAID
AE-8    11/1/2012   November,2012   PAID
AE-8    12/1/2012   December,2012   PAID

对于报告目的,需要输出为

REG_ID  DOP         MONTH           STATUS

AE-8    7/1/2012    July,2012       PAID
AE-8    8/1/2012    August,2012     NOTPAID
AE-8    9/1/2012    September,2012  PAID
AE-8    10/1/2012   October,2012    NOTPAID
AE-8    11/1/2012   November,2012   PAID

有人可以帮助显示上面提到的输出吗?

解决方法

您可以使用外部联接的 partition by扩展来实现此目的.这是一个例子:

-- sample of data from your question 
SQL> with fees_status(REG_ID,DOP,MONTH1,STATUS) as(
  2    select 'AE-8',to_date('7/1/2012','MM/DD/YYYY'),'July,2012','PAID' from dual union all
  3    select 'AE-8',to_date('9/1/2012','September,'PAID' from dual union all
  4    select 'AE-8',to_date('11/1/2012','November,'PAID' from dual union all
  5    select 'AE-8',to_date('12/1/2012','December,'PAID' from dual
  6  ),-- dates
  7  dates(dt) as(
  8    select add_months(to_date('01/01/2012','mm/dd/yyyy'),level - 1)
  9      from dual
 10    connect by level <= 12
 11  )
 12  select t.reg_id
 13,d.dt as dop
 14,to_char(d.dt,'fmMonth,YYYY') as month1
 15,Nvl(t.status,'NOTPAID')       as status
 16   from fees_status t
 17   partition by (t.reg_id)
 18   right outer join dates d
 19      on (d.dt = t.dop)
 20   where d.dt between (to_date('1-Jul-2012','dd-Month-yyyy'))
 21                  and (to_date('1-Dec-2012','dd-Month-yyyy'))
 22  ;

REG_ID DOP         MONTH1                STATUS
------ ----------- -------------------- -------
AE-8   01-Jul-12   July,2012            PAID
AE-8   01-Aug-12   August,2012          NOTPAID
AE-8   01-Sep-12   September,2012       PAID
AE-8   01-Oct-12   October,2012         NOTPAID
AE-8   01-Nov-12   November,2012        PAID
AE-8   01-Dec-12   December,2012        PAID

6 rows selected

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读