我需要根据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
非常感谢任何帮助。
答案 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