这是我先前问题的后续内容。我只是觉得如果我再解释一遍比较容易,因为我想从我的查询中获得更多的细节。所以我们开始:
示例表:(注:该表有100个ID,每个ID都有许多不同的LOTNO)
ITEMNO LOTNO TRANS_QUAN TRANS_TYPE
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和这个代码):
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中的记录
我希望我的产出能像
ID LOTNO SUM_IN SUM_OUT
1 45 30 50
1 3 2 8我有什么想法可以把这个结合起来,给出一个更具体的结果集吗?可能是一些简单的东西,比如额外的一组什么的??我希望我已经清楚地知道了我希望实现的目标。
谢谢你们的持续支持!)
发布于 2012-09-27 14:56:18
根据你的样本数据,这就是你想要的吗?
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发布于 2012-09-27 14:57:12
明白!) :)
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'谢谢你们的帮助!!
https://stackoverflow.com/questions/12623717
复制相似问题