【发布时间】:2016-02-21 08:34:54
【问题描述】:
我希望在下面的 SQL 中应用 Group By 条件,以便 O/P 显示带有 GP 的 POL#。
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 命令未正确结束”错误,其中光标指向“t”
请提供帮助。
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
根据此查询,我将考虑每个 POL# 的“客户”记录和对 AMT 求和。 (客户的每笔借记都将根据 POL# 向保险公司提供信用,反之亦然)
每个 POL# 客户的预期 O/P(借方总和 - 贷方总和)
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 将被视为重复键。
标签: sql group-by cross-join