首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按多个字段分组的数量之和

按多个字段分组的数量之和
EN

Stack Overflow用户
提问于 2012-09-27 14:29:50
回答 2查看 138关注 0票数 0

这是我先前问题的后续内容。我只是觉得如果我再解释一遍比较容易,因为我想从我的查询中获得更多的细节。所以我们开始:

示例表:(注:该表有100个ID,每个ID都有许多不同的LOTNO)

ITEMNO LOTNO TRANS_QUAN TRANS_TYPE

代码语言:javascript
复制
 1      45        16          PO  
 1       3         2          PO  
 1      45        47          MH  
 1      45         3          MH
 1       3         8          MH

到目前为止,我没有考虑到每个ID的彩票编号不同,而是基于ID和类型的总和。下面的代码用ID = 1对TYPE = 'PO‘的所有数量值进行求和,然后将它们与类型=’手动/反冲洗‘的所有总和数量值与ID = 1进行比较。这段代码在这方面工作得很好(这要感谢Nicholas Krasnov和这个代码):

代码语言:javascript
复制
 SELECT * 
 FROM (SELECT TR.ITEMNO
         , ROUND(SUM(TR.TRANS_QUAN * (DECODE(TR.TRANS_TYPE, 'PO', 1, 0)))) AS SUM_IN
         , ROUND(SUM(TR.TRANS_QUAN * (DECODE(TR.TRANS_TYPE, 'MANUAL/BACKFLUSH', 1,0))))AS SUM_OUT
     FROM IQMS.TRANSLOG TR
     GROUP BY IQMS.TR.ITEMNO
     ORDER BY IQMS.TR.ITEMNO)
 WHERE SUM_OUT > SUM_IN

我想进一步分解和计算,并包含LOTNO字段。因此,在上表中,对于ID = 1,LotNo = 45和TYPE = PO的所有值,我希望将它们与ID =1、LotNo = 45和类型=‘MANUAL\反向冲洗’进行比较。

然后,我想继续比较(ID = 1,LOTNO = 3,TYPE = 'PO')和(ID= 1,LOTNO = 3,TYPE =‘手动/反冲洗’)等等。

我也只想返回SUM_OUT > SUM_IN中的记录

我希望我的产出能像

代码语言:javascript
复制
ID      LOTNO     SUM_IN      SUM_OUT    

 1        45        30           50
 1         3         2            8

我有什么想法可以把这个结合起来,给出一个更具体的结果集吗?可能是一些简单的东西,比如额外的一组什么的??我希望我已经清楚地知道了我希望实现的目标。

谢谢你们的持续支持!)

EN

回答 2

Stack Overflow用户

发布于 2012-09-27 14:56:18

根据你的样本数据,这就是你想要的吗?

代码语言:javascript
复制
select *
  from ( SELECT TR.ITEMNO
              , tr.lotno
              , ROUND(SUM(TR.TRANS_QUAN * (DECODE(TR.TRANS_TYPE, 'PO', 1, 0)))) AS SUM_IN
              , ROUND(SUM(TR.TRANS_QUAN * (DECODE(TR.TRANS_TYPE, 'MH', 1,0))))AS SUM_OUT
          FROM TRANSLOG TR
         GROUP BY TR.ITEMNO, tr.lotno
         ORDER BY TR.ITEMNO
       )
 where sum_out > sum_in
票数 1
EN

Stack Overflow用户

发布于 2012-09-27 14:57:12

明白!) :)

代码语言:javascript
复制
SELECT *
FROM

  (SELECT TR.ITEMNO, TR.LOTNO,
       SUM(CASE WHEN TR.TRANS_TYPE = 'PO' THEN TR.TRANS_QUAN ELSE 0 END) AS SUM_IN,
       SUM(CASE WHEN TR.TRANS_TYPE = 'MANUAL/BACKFLUSH' THEN TR.TRANS_QUAN ELSE 0 END)AS SUM_OUT
   FROM IQMS.TRANSLOG TR
   GROUP BY TR.ITEMNO, TR.LOTNO
   ORDER BY TR.ITEMNO, TR.LOTNO)

WHERE SUM_OUT > SUM_IN
AND SUM_IN != '0'

谢谢你们的帮助!!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12623717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档