I'm getting a ORA-01790: expression must have same datatype as corresponding expression error message. Below is the sql I'm using. Is the CASE statement causing this issue? I'm new to sql and this is the first time I've tried using a UNION statement. I've tried a join instead of the UNION but any join I have tried causes the prior_amt field to be blank. Thanks for the help........
SELECT
pa.BUSINESS_UNIT as BUS_UNIT,
pa.DESCR AS DESCRIPT,
pdr.DEPTID AS DEPTID,
pdr.ASSET_ID AS ASSET_NO,
pdr.ACCOUNT_AD AS ACCT_AD,
pdr.BOOK AS BOOK,
MAX(CASE WHEN (pdr.FISCAL_YEAR =2014 AND pdr.ACCOUNTING_PERIOD =11) THEN pdr.DEPR END) as CURRENT_AMT,
MAX(CASE WHEN (pdr.FISCAL_YEAR =2104 AND pdr.ACCOUNTING_PERIOD =10) THEN pdr.DEPR END) as PRIOR_AMT,
'' AS ACCT_DE,
'' AS JRNL_ID,
'' AS JRNL_DT
FROM PS_ASSET pa
INNER JOIN PS_DEPR_RPT pdr
ON pa.ASSET_ID = pdr.ASSET_ID
AND pa.BUSINESS_UNIT = pdr.BUSINESS_UNIT
WHERE
pa.BUSINESS_UNIT='A0465'
AND pdr.BOOK='PERFORM'
AND ((pdr.FISCAL_YEAR=2014 AND pdr.ACCOUNTING_PERIOD=11)
OR (pdr.FISCAL_YEAR=2014 AND pdr.ACCOUNTING_PERIOD=10))
group by
pa.business_unit,
pa.descr,
pdr.deptid,
pdr.asset_id,
pdr.account_ad,
pdr.book
UNION ALL
select
'' as BUS_UNT,
'' AS DESCRIPT,
'' AS DEPTID,
'' AS ACCT_AD,
'' AS BOOK,
'' AS CURRENT_AMT,
'' AS PRIOR_AMT,
pdl.asset_id AS ASSET_NO,
pdl.account AS ACCT_DE,
pdl.journal_id AS JRNL_ID,
pdl.journal_date AS JRNL_DT
from ps_dist_ln pdl
where
book = 'PERFORM'
and business_unit = 'A0465'
and fiscal_year = 2014
and accounting_period = 11
and distribution_type = 'DE'
Your problem is that you've put the columns in a different order in each half of the union. The columns have to match up, in the same order, between the two halves. It's not to do with the CASE expression.
Also, where you've written 2104, it should probably be 2014.