У меня есть следующие две таблицы: ALLOWANCE и RANGES.У ALLOWANCE есть ключевой столбец AllowanceID и, соответствующий каждому AllowanceID, будет ряд записей RANGE.Range имеет первичный ключ RangeID и ссылку на AllowanceID.Помимо них, он имеет следующие столбцы:
RANGESTART
RANGEEND
POUNDS
SUM
Теперь я хочу написать запрос, чтобы соответствовать диапазонам двух AllowanceID.т. е. учитывая SorceAllowanceID и TargetAllowanceID, я хочу сопоставить количество диапазонов, а также значения диапазонов источника для цели.Итак, у меня есть следующий запрос (я использую только один столбец здесь), за которым следует оператор INSERT (здесь не показан),
UPDATE
(
SELECT
src.pounds AS src_pounds ,
tgt.pounds AS tgt_pounds
FROM
(
SELECT rank() OVER (PARTITION BY PR.ALLOWANCEID ORDER BY PR.RANGESTART) RN
,PR.*
FROM RANGES PR
WHERE PR.ALLOWANCEID=sourceallowanceid
ORDER BY PR.RANGESTART) src ,
(SELECT rank() OVER (PARTITION BY PR.ALLOWANCEID ORDER BY PR.RANGESTART) PN
,PR.*
FROM ranges PR
WHERE PR.aLLOWANCEID=targetallowanceid
ORDER BY PR.RANGESTART) TGT
WHERE src.Rn=tgt.PN
)
SET tgt_pounds = src_pounds;
Но это привело к ORA-01779.Затем я попытался с оператором MERGE
MERGE INTO
(
SELECT rank() OVER (PARTITION BY PR.ALLOWANCEID ORDER BY PR.RANGESTART) PN
,PR.*
FROM RANGES PR
WHERE PR.ALLOWANCEID=targetallowanceid
ORDER BY PR.RANGESTART) tgt
USING (SELECT rank() OVER (PARTITION BY PR.ALLOWANCEID ORDER BY PR.RANGESTART) RN
,PR.*
FROM RANGES PR
WHERE PR.ALLOWANCEID=sourceallowanceid
ORDER BY PR.RANGESTART) src
ON ( src.RN = tgt.PN )
WHEN MATCHED
THEN
UPDATE
SET tgt.pounds = src.pounds
WHEN NOT MATCHED THEN
--Insert
, который выбросил ORA-00903.
Пожалуйста, объясните мне, как написать запрос для этого.
Благодарю вас всех,
Pradeep