Oracle Query按标志汇总

问题描述 投票:0回答:1

我有一个req来根据ID Columns和Flag汇总金额。

我的意见: -

**ordr | item| amt|flg |dtl_item**
637262  1   98.58   Y   1
637262  2   1182.7  Y   1
637262  2   2365.4  Y   2
661209  1   0       Y   1
661209  1   960     N   1.1
661209  2   0       Y   1
661209  2   96      N   1.1

我的输出: -

**ordr | item| amt|flg |dtl_item**
637262  1   98.58   Y   1
637262  2   1182.7  Y   1
637262  2   2365.4  Y   2
661209  1   960     Y   1
661209  2   96      Y   1

1)我需要将amt汇总到每个flg='Y'ordr,item and dtl_item记录。

我尝试编写如下所示的查询并过滤掉flg ='N'记录,但它不能按预期工作。

select ordr,item, sum(amt), max(flg), dtl_num
group by ordr,item,dtl_num

任何帮助将不胜感激。

sql oracle
1个回答
0
投票

以下内容查找带有Y标志的所有行,并为每个订单/项目添加带有N标志的金额。如果订单/商品具有多个Y标志行和一个或多个N标志行,则无效。

select ty.ordr, ty.item, 
coalesce(ty.amt,0) + coalesce(tn.amt,0) as amt,
ty.flag, ty.dtl_item
from
( select ordr, item, amt, flag, dtl_item 
  from test where flag = 'Y' ) ty
left join
( select ordr, item, sum(amt) as amt
  from test where flag = 'N'
  group by ordr, item) tn
on ty.ordr = tn.ordr and ty.item = tn.item
order by ty.ordr, ty.item
© www.soinside.com 2019 - 2024. All rights reserved.