Запрос работает в SQL Developer, но не работает в Putty (ORA-00907, отсутствует скобка)
Можете ли вы увидеть какие-либо контрольные признаки того, что этот код отсутствует? Извините, если это слишком долго. Это полное внешнее соединение двух сегментов, MTD и YTD. Ожидаемые результаты разделены запятыми. Это прекрасно работает в SQL Developer, но не в Unix (Putty).
select mtd.portfolio||','||
mtd.descr||','||
mtd.ccy||','||
CASE WHEN ytd.ytd_amnt IS NOT NULL THEN
CASE WHEN substr(mtd.acnt,1,1) in ('2','5','0') --base currency month to date
THEN (sum(ytd.ytd_amnt_bc) - sum(mtd.mtd_amnt_bc))*-1
ELSE (sum(ytd.ytd_amnt_bc) - sum(mtd.mtd_amnt_bc))
END
ELSE
0
END
||','||
CASE WHEN mtd.ccy in ('USD') THEN
CASE WHEN substr(mtd.acnt,1,1) in ('2','5','0') THEN --base currency year to date
sum(mtd.mtd_amnt)*-1
ELSE
sum(mtd.mtd_amnt)
END
ELSE
CASE WHEN substr(mtd.acnt,1,1)in ('2','5','0') THEN
sum(mtd.mtd_amnt_bc)*-1
ELSE
sum(mtd.mtd_amnt_bc)
END
END
||','||
CASE WHEN ytd.ytd_amnt IS NOT NULL THEN
CASE WHEN substr(mtd.acnt,1,1)in ('2','5','0') THEN --native currency month to date
(sum(ytd.ytd_amnt) - sum(mtd.mtd_amnt)) *-1
ELSE
sum(ytd.ytd_amnt) - sum(mtd.mtd_amnt)
END
ELSE
0
END||','||
CASE WHEN mtd.ccy in ('PHP') THEN --native currency year to date
CASE WHEN substr(mtd.acnt,1,1)in ('2','5','0') THEN
mtd.mtd_amnt*-1
ELSE
mtd.mtd_amnt
END
ELSE
CASE WHEN substr(mtd.acnt,1,1)in ('2','5','0') THEN
sum(mtd.mtd_amnt_bc)*-1
ELSE
sum(mtd.mtd_amnt_bc)
END
END||','||
CASE WHEN substr(mtd.acnt,1,1)='0'
THEN '5'
ELSE substr(mtd.acnt,1,1)
END
from
(select (accl.acnt) acnt, (kp.account) portfolio, (accc.descr)descr, (accl.curr) ccy, sum(accl.amnt_bc) mtd_amnt_bc, sum(accl.amnt) mtd_amnt
from acc$ledger accl
LEFT JOIN k$portfolio kp ON kp.id = accl.portfolio
LEFT JOIN acc$chart accc ON accc.acnt = accl.acnt
where accl.company = accc.company
and accl.company <> 1
and substr(accl.acnt,1,1) in ('0','1','2','5')
and accc.fisc_yr in (select to_char(current_business_date,'YYYY') from k$company where id=1)
and accl.account_dte <> to_date('0001-01-01','YYYY-MM-DD')
and accl.dt <= (select last_day(add_months(current_business_date,-1)) from k$company where id=1)
group by accc.descr, kp.account, accl.acnt, accl.curr
order by kp.account, accl.acnt
)
mtd full outer join
(select (accl.acnt) acnt, (kp.account) portfolio, (accc.descr)descr, sum(accl.amnt_bc) ytd_amnt_bc, sum(accl.amnt) ytd_amnt
from acc$ledger accl
LEFT JOIN k$portfolio kp ON kp.id = accl.portfolio
LEFT JOIN acc$chart accc ON accc.acnt = accl.acnt
where accl.company = accc.company
and accl.company <> 1
and substr(accl.acnt,1,1) in ('0','1','2','5')
and accc.fisc_yr in (select to_char(current_business_date,'YYYY') from k$company where id=1)
and accl.account_dte <> to_date('0001-01-01','YYYY-MM-DD')
and accl.dt <= (select last_day(add_months(current_business_date,-2)) from k$company where id=1)
group by accc.descr, kp.account, accl.acnt
order by kp.account, accl.acnt)
ytd
on mtd.portfolio=ytd.portfolio
and mtd.descr=ytd.descr
and mtd.acnt= ytd.acnt
group by mtd.acnt, mtd.portfolio, mtd.descr, mtd.ccy, mtd.mtd_amnt, ytd.ytd_amnt
order by mtd.portfolio, mtd.acnt, mtd.descr;
1 ответ
Удалить пустую строку. По умолчанию SQL*Plus использует пустые символы новой строки для завершения оператора SQL. SQL Developer не работает одинаково, в зависимости от того, как вы выполняете запрос.