Oracle Query按标志汇总

时间:2018-03-23 15:18:40

标签: sql oracle

我需要根据ID列和标记汇总金额。

我的输入: -

**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

非常感谢任何帮助。

1 个答案:

答案 0 :(得分: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