Я хочу применить группу По условию для моего SQL ниже, чтобы O/P отобразил POL # с GP.Группа По синтаксису при использовании Cross Join
select t.POl#, (DEB.CUSTD - CRED.CUSTC) AS GP
from (
(
select POL.SP_NUM POL#
, sum(D.AMT) AS CUSTD
from S_INVOICE D
, S_ASSET POL
where POL.ROW_ID = D.FN_ACCNT_ID
and POL.SP_NUM in ('000','111','222')
and D.DEBIT_TYPE = 'Customer'
group by POL.SP_NUM
) DEB
CROSS JOIN
(
select pol.SP_NUM POL#
, sum(C.AMT) AS CUSTC
from S_SRC_PAYMENT C
, S_ASSET POL
where POL.ROW_ID = C.ASSET_ID
and POL.SP_NUM in ('000','111','222')
and C.CG_DEDN_TYPE_CD = 'Customer'
group by POL.SP_NUM
) CRED
) t
group by t.POL#
Когда я исполняю то же я получаю «ORA-00933: команды SQL не должным образом закончилась» ошибка, когда курсор указывает на «т»
Просьба помочь.
Expected O/P:
POL# GP
000 800
111 120
222 50
Прикрепление образца данных с объяснением для лучшего понимания требований:
Таблица 1:
S_ASSET
ROW_ID POL#
1 000
2 111
3 222
4 333
5 444
Таблица 2:
S_INVOICE (Debit Table)
FN_ACCNT_ID POL# DEBIT_TYPE AMT
1 000 Customer 10
1 000 Customer 10
1 000 Insurer 5
2 111 Customer 10
3 222 Customer 10
3 222 Insurer 5
5 444 Insurer 10
Таблица 3:
S_SRC_PAYMENT (Credit Table)
ASSET_ID POL# CG_DEDN_TYPE_CD AMT
1 000 Insurer 10
1 000 Insurer 10
1 000 Customer 5
2 111 Insurer 10
3 222 Insurer 5
3 222 Insurer 5
3 222 Customer 5
5 444 Customer 10
В соответствии с этим запросом я буду рассматривать записи «Customer» для POL # и SUM AMT. (Каждый дебет для клиента зачисляет Страховщик (ы) в POL # & наоборот)
Ожидаемого O/P (Сумма дебета - Сумма кредитов) для заказчика на POL #
POL # AMT (GP)
000 15
111 10
222 5
333 0
444 -10
Что является уникальным ключом S_ASSET? Вы используете столбцы SP_NUM и ROW_ID. Является ли один из них однозначно идентифицировать запись в таблице? Может, даже оба? Или, может быть, просто сочетание этих двух? –
уникальным ключом для S_ASSET будет ROW_ID, но для GROUPING SAKE SP_NUM будет считаться, что это будет дублироваться. –