0

以下是用于根据特定条件检索记录的查询。当我单独使用查询时,我得到了结果,但是当我添加一个联合时,它给了我错误,因为命令没有正确结束。

    select ltrim(rtrim(LV_ID)) || '|' ||  ltrim(rtrim(EXPS_TYP_CD)) || '|'
from sysadm.OM_CDM_PC_HNDSHAKE
where ltrim(rtrim(PROC_ID)) in 'B3_HNDSHK_OTC' and RUN_ID = 'ME-BD10'
and FISCAL_YEAR=2012 and ACCOUNTING_PERIOD=8 and BUS_DAY_NO=10
and ltrim(rtrim(LV_ID)) not in (' ','0','002','BEAD0')
order by ltrim(rtrim(LV_ID)) || '|' || ltrim(rtrim(EXPS_TYP_CD)) || '|'
union
select ltrim(rtrim(LV_ID)) || '|' ||  ltrim(rtrim(EXPS_TYP_CD)) || '|'
from sysadm.OM_CDM_PC_HNDSHAKE
where ltrim(rtrim(PROC_ID)) in 'B3_HNDSHK_OTC' and RUN_ID = 'ME-BD10'
and FISCAL_YEAR=2012 and ACCOUNTING_PERIOD=8 and BUS_DAY_NO=10
and ltrim(rtrim(LV_ID)) is null
order by ltrim(rtrim(LV_ID)) || '|' || ltrim(rtrim(EXPS_TYP_CD)) || '|'
4

1 回答 1

1

我怀疑问题在于工会的两个部分都有“order by”条款。尝试删除这些,看看你会得到什么。如果这给了你一个结果,那么你就可以在外部添加一个订单。

或者您可能想尝试重写您的查询以使用“或”而不是“联合”。

就像是:

select ltrim(rtrim(LV_ID)) || '|' ||  ltrim(rtrim(EXPS_TYP_CD)) || '|'
   from sysadm.OM_CDM_PC_HNDSHAKE
where 
   (ltrim(rtrim(PROC_ID)) in 'B3_HNDSHK_OTC' and RUN_ID = 'ME-BD10'
     and FISCAL_YEAR=2012 and ACCOUNTING_PERIOD=8 and BUS_DAY_NO=10
     and ltrim(rtrim(LV_ID)) not in (' ','0','002','BEAD0')) 
   or
   (ltrim(rtrim(PROC_ID)) in 'B3_HNDSHK_OTC' and RUN_ID = 'ME-BD10'
     and FISCAL_YEAR=2012 and ACCOUNTING_PERIOD=8 and BUS_DAY_NO=10
     and ltrim(rtrim(LV_ID)) is null)
order by ltrim(rtrim(LV_ID)) || '|' || ltrim(rtrim(EXPS_TYP_CD)) || '|'

不幸的是,我目前没有一个 oracle 实例来测试它,但是当你从联合的两个部分的同一张表中选择相同的东西时,你应该可以用“或”来做。

于 2013-02-06T01:13:07.970 回答