使用交叉联接时按语法分组

安娜·乔尔

我希望在下面的SQL中应用“分组依据”条件,以便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#和AUM求和的“客户”记录。(客户的每笔借记都将按照POL#向保险公司贷记,反之亦然)

每个POL#对客户的预期O / P(借方总和-贷方总和)

POL #       AMT (GP)
000         15
111         10
222         5
333         0
444        -10
托斯滕·凯特纳

您显然只想按s_asset获取deb和cred,然后进行汇总以获得总和。您可以在没有联接的情况下执行此操作,而是直接对子和求子:

select 
  sp_num as pol#,
  sum(<get deb sum for the pol.row_id here>) - sum(<get cred sum for the pol.row_id here>)
from s_asset pol 
where sp_num in ('000','111','222')
group by sp_num;

完整的查询:

select 
  sp_num as pol#,
  coalesce(sum(
    (
      select sum(deb.amt)
      from s_invoice deb
      where deb.fn_accnt_id = pol.row_id
      and deb.debit_type = 'Customer' 
    )
  ), 0) -
  coalesce(sum(
    (
      select sum(cred.amt) 
      from s_src_payment cred
      where cred.asset_id = pol.row_id
      and cred.cg_dedn_type_cd = 'Customer' 
    ), 0)
  ) as gp
from s_asset pol 
where sp_num in ('000','111','222')
group by sp_num;

与join相同:

select 
  pol.sp_num as pol#,
  coalesce(sum(deb.total), 0) - coalesce(sum(cred.total), 0) as gp
from s_asset pol
left join
(
  select fn_accnt_id as pol_row_id, sum(deb.amt) as total
  from s_invoice
  where  debit_type = 'Customer' 
  group by fn_accnt_id 
) deb on deb.pol_row_id = pol.row_id
left join
(
  select asset_id as pol_row_id, sum(amt) as total
  from s_src_payment
  where  cg_dedn_type_cd = 'Customer' 
  group by asset_id
) cred on cred.pol_row_id = pol.row_id
group by pol.sp_num;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用交叉联接更新查询

来自分类Dev

按语法错误分组

来自分类Dev

在oracle中,按语法使分组混乱,这如何以及为什么起作用?

来自分类Dev

SQL查询按语句分组

来自分类Dev

如何使用Linq将实体表与交叉引用表联接

来自分类Dev

将SQL分组和非分组结果与交叉联接结合在一起?

来自分类Dev

串联递归交叉联接

来自分类Dev

MYSQL SELECT按语句分组

来自分类Dev

尝试使用联接时,我的SQL语法有错误

来自分类Dev

使用OR语法在多个列上使用联接表

来自分类Dev

在SQL中使用分组依据时联接表

来自分类Dev

使用内部联接group by改善jsonb交叉联接上ORDER BY的性能

来自分类Dev

使用内部联接的更新查询的正确语法

来自分类Dev

SQL在汇总和分组时联接多个表

来自分类Dev

... oracle初学者按语法分组

来自分类Dev

如何在使用MDX的交叉联接集上进行汇总

来自分类Dev

交叉联接复杂查询

来自分类Dev

使用[]时的语法问题

来自分类Dev

在proc sql中按语句分组不是highlighitng

来自分类Dev

按语法错误分组

来自分类Dev

使用内部联接查询mysql更新时出现语法错误

来自分类Dev

使用SQL语法在LINQ中执行联接

来自分类Dev

使用交叉滤镜对直方图进行过滤和分组

来自分类Dev

如何使用Linq将实体表与交叉引用表联接

来自分类Dev

带有按语句分组的SQL更新不起作用

来自分类Dev

获取百分比以及按语句分组

来自分类Dev

Spark SQL:使用子查询进行交叉联接

来自分类Dev

按语句分组的多个字段

来自分类Dev

Xtext:使用带交叉引用的语法谓词