ORACLE 分组排序求助

时间:2022-05-19 02:26:15
原因:同一C,同一S,不同的P,
需要取PACKS_NO PO_NO两列的最大值,并对ALL_QTY B_QTY C_QTY按上述条件求和:

记录集:
C S P PACKS_NO E ALL_QTY B_QTY C_QTY
AIR2016101102T4 2016/10/3 11588723 CO2016101102 840148790 100 0 0
AIR2016101102T4 2016/10/3 11588723 CO2016101101 840150601 100 0 0
AIR2016101102T4 2016/10/3 11588724 CO2016101104 840148790 7500 0 0
AIR2016101102T4 2016/10/3 11588724 CO2016101103 840150601 7500 0 0
AIR2016101102T4 2016/10/3 11588725 CO2016101106 840148790 6000 0 0
AIR2016101102T4 2016/10/3 11588725 CO2016101107 840150601 6000 0 0


问题SQL:
SELECT TP.C,
       TP.S,
       TP.P,
       MAX(TP.D),
       MAX(TP.E) E,
       SUM(TP.ALL_QTY) ,
       SUM(TP.B_QTY) ,
       SUM(TP.c_QTY) 
  FROM TABLEA TP, TABLEB GP
 WHERE TP.C = GP.C
   AND TP.S = GP.S
   AND TP.P = GP.P
   AND GP.PLAN_NO = '****'
 GROUP BY TP.P, TP.C, TP.S;

按P分组后取    MAX(TP.D),  MAX(TP.E) E,会因为PACKS_NO E大小不规整而不能按需取最大值

求各位大神支招,不胜感激


7 个解决方案

#1


你要的结果是什么样的呢,画个 excel 出来吧。

#2


把给的示例数据格式化一下,看不清楚
另外,预期得到什么样的结果也贴出来

#3


预期结果:
AIR2016101102T4 2016/10/3 11588723 CO2016101101 840150601 200 0 0
AIR2016101102T4 2016/10/3 11588724 CO2016101103 840150601 15000 0 0
AIR2016101102T4 2016/10/3 11588725 CO2016101107 840150601 12000 0 0

#4


原始数据:
C	S	P	PACKS_NO	PO_NO	ALL_QTY	STD_QTY	BOX_QTY
AIR2016101102T4 2016/10/3 11588723 CO2016101102 840148790 100 0 0
AIR2016101102T4 2016/10/3 11588723 CO2016101101 840150601 100 0 0
AIR2016101102T4 2016/10/3 11588724 CO2016101104 840148790 7500 0 0
AIR2016101102T4 2016/10/3 11588724 CO2016101103 840150601 7500 0 0
AIR2016101102T4 2016/10/3 11588725 CO2016101106 840148790 6000 0 0
AIR2016101102T4 2016/10/3 11588725 CO2016101107 840150601 6000 0 0

目标数据:
C	S	P	PACKS_NO	PO_NO	ALL_QTY	STD_QTY	BOX_QTY
AIR2016101102T4 2016/10/3 11588723 CO2016101101 840150601 200 0 0
AIR2016101102T4 2016/10/3 11588724 CO2016101103 840150601 15000 0 0
AIR2016101102T4 2016/10/3 11588725 CO2016101107 840150601 12000 0 0


需求:在C,S相同的情况下,根据P不同,取PO_NO的最大值,并根据C,S,P将ALL_QTY,STD_QTY,BOX_QTY取和,望各位大神支招!

#5


-- 这个意思?
select C, S, P, MAX(PN_NO), SUM(ALL_QTY)
from t 
group by C,S,P

#6


还有一列  PACKS_NO ,不能取最值(取最值的话可能会出现po_no与packs_no不匹配的情况),需要取 po_no最大的那一列对应的packs_no值

#7


已在另一贴回复,你确认一下结果 
http://bbs.csdn.net/topics/392032991?page=1#post-401678540

#1


你要的结果是什么样的呢,画个 excel 出来吧。

#2


把给的示例数据格式化一下,看不清楚
另外,预期得到什么样的结果也贴出来

#3


预期结果:
AIR2016101102T4 2016/10/3 11588723 CO2016101101 840150601 200 0 0
AIR2016101102T4 2016/10/3 11588724 CO2016101103 840150601 15000 0 0
AIR2016101102T4 2016/10/3 11588725 CO2016101107 840150601 12000 0 0

#4


原始数据:
C	S	P	PACKS_NO	PO_NO	ALL_QTY	STD_QTY	BOX_QTY
AIR2016101102T4 2016/10/3 11588723 CO2016101102 840148790 100 0 0
AIR2016101102T4 2016/10/3 11588723 CO2016101101 840150601 100 0 0
AIR2016101102T4 2016/10/3 11588724 CO2016101104 840148790 7500 0 0
AIR2016101102T4 2016/10/3 11588724 CO2016101103 840150601 7500 0 0
AIR2016101102T4 2016/10/3 11588725 CO2016101106 840148790 6000 0 0
AIR2016101102T4 2016/10/3 11588725 CO2016101107 840150601 6000 0 0

目标数据:
C	S	P	PACKS_NO	PO_NO	ALL_QTY	STD_QTY	BOX_QTY
AIR2016101102T4 2016/10/3 11588723 CO2016101101 840150601 200 0 0
AIR2016101102T4 2016/10/3 11588724 CO2016101103 840150601 15000 0 0
AIR2016101102T4 2016/10/3 11588725 CO2016101107 840150601 12000 0 0


需求:在C,S相同的情况下,根据P不同,取PO_NO的最大值,并根据C,S,P将ALL_QTY,STD_QTY,BOX_QTY取和,望各位大神支招!

#5


-- 这个意思?
select C, S, P, MAX(PN_NO), SUM(ALL_QTY)
from t 
group by C,S,P

#6


还有一列  PACKS_NO ,不能取最值(取最值的话可能会出现po_no与packs_no不匹配的情况),需要取 po_no最大的那一列对应的packs_no值

#7


已在另一贴回复,你确认一下结果 
http://bbs.csdn.net/topics/392032991?page=1#post-401678540