第一项免责声明:
- 我不是程序员,从来不是
- 从未教过“更高”的数学
- 尽管上面的语句有时我必须使用 SQL。
现在我需要view
从select
我的同事中创建一个(他使用了四个union
s 看起来他不知道如何or
在 where 部分使用......),现在我在这里。
UNION
是否有一种简单易读的方法可以在获得相同结果集的同时摆脱最后一个?
提前致谢!
select a.prodt_cde,
b.ccy,
a.int_tabno,
b.start_dn,
b.end_dn,
b.frte_term,
b.base_id,
b.ptvar,
c.base_rate,
c.desc_shnm,
c.rel_day
from linc.systwodb_ptico a, linc.systwodb_ptlfo b, linc.systwodb_baso c
where a.prodt_cde in
(select prodt_cde
from linc.systwodb_ptmao
where prodt_clas in (select prod_clas
from linc.systwodb_ramto
where main_type in (71, 72))
and allow_dif in ('Y', 'M'))
and a.int_type = 'LS'
and a.int_tabno = b.int_tabno
and b.ccy in
(select ccy from linc.systwodb_ptmao where prodt_cde = a.prodt_cde)
and b.base_id <> 0
and b.base_id = c.base_id
and b.ccy = c.ccy
and ((b.end_dn = 0 and b.start_dn <= c.rel_day) or
(b.end_dn <> 0 and b.start_dn <= c.rel_day and
b.end_dn >= c.rel_day) or
(b.start_dn > c.rel_day and not exists
(select *
from linc.systwodb_baso
where base_id = b.base_id
and ccy = b.ccy
and rel_day = b.start_dn) and
c.rel_day = (select NVL(max(rel_day), 0)
from linc.systwodb_baso
where base_id = b.base_id
and ccy = b.ccy
and rel_day < b.start_dn)))
-- 4. PTLFO.BASE_ID = 0, or cannot find BASO before PTLFO.START_DN
union
select a.prodt_cde,
b.ccy,
a.int_tabno,
b.start_dn,
b.end_dn,
b.frte_term,
b.base_id,
b.ptvar,
0 as base_rate,
' ' as desc_shnm,
0 as rel_day
from linc.systwodb_ptico a, linc.systwodb_ptlfo b --, linc.systwodb_baso c
where a.prodt_cde in
(select prodt_cde
from linc.systwodb_ptmao
where prodt_clas in (select prod_clas
from linc.systwodb_ramto
where main_type in (71, 72))
and allow_dif in ('Y', 'M'))
and a.int_type = 'LS'
and a.int_tabno = b.int_tabno
and b.ccy in
(select ccy from linc.systwodb_ptmao where prodt_cde = a.prodt_cde)
and (b.base_id = 0 or not exists
(select *
from linc.systwodb_baso
where base_id = b.base_id
and ccy = b.ccy
and rel_day <= b.start_dn))
;