select trunc(enddate) from maximo.contract where revisionnum = revisionnum
Не коррелирует один revisionnum
с вложенным запросом, а другой revisionnum
с внешним запросом; он будет использовать revisionnum
в локальной области видимости для обоих и будет возвращать каждую строку. Используйте псевдонимы таблицы, чтобы указать, куда вы хотите применить revsionnum
:
select distinct
p.CONTRACTNUM as Contract,
c.NAME as Name,
( select trunc(enddate)
from maximo.contract c1 -- Add table alias
where c1.revisionnum = p.revisionnum -- use aliases
) -
( select trunc(enddate)
from maximo.contract c2 -- Add table alias
where c2.revisionnum = p.revisionnum-1 -- use aliases
) as "Current Value Variation"
From Maximo.Purchview P
JOIN Maximo.Expedite E
ON P.Contractnum=E.Maxid
JOIN Maximo.Companies C
ON C.Company=P.Vendor
Where E.Maxapp='CP'
And P.status ='EXCUTE'
And P.ENDDATE>sysdate
order by P.Contractnum;
(Предполагая, что revisionnum
находится в PurchView
, если нет, тогда используйте правильный псевдоним, как мы этой информации нет.)
Если вам необходимо дополнительно соотнести контракт с PurchView
, добавьте это к условиям фильтра вложенного запроса:
select distinct
p.CONTRACTNUM as Contract,
c.NAME as Name,
( select trunc(enddate)
from maximo.contract c1 -- Add table alias
where c1.revisionnum = p.revisionnum -- use aliases
and c1.contractnum = p.contactnum -- add additional filters
) -
( select trunc(enddate)
from maximo.contract c2 -- Add table alias
where c2.revisionnum = p.revisionnum-1 -- use aliases
and c2.contractnum = p.contactnum -- add additional filters
) as "Current Value Variation"
From Maximo.Purchview P
JOIN Maximo.Expedite E
ON P.Contractnum=E.Maxid
JOIN Maximo.Companies C
ON C.Company=P.Vendor
Where E.Maxapp='CP'
And P.status ='EXCUTE'
And P.ENDDATE>sysdate
order by P.Contractnum;