就是按order by ADDRESS,Amount desc ,
然后取前两条记录,后面的用others 代替,汇总金额成第三条记录,
也就是说不管原始记录有多少条,我只能取金额最高的两条和其它的汇总成一条记录,DRDL01变为others 即可例如记录为:
ADDRESS_NUMBER CUSTOMER DRDL01 IMSRP1 BEFORETWOYEAR
1 10003051 ALPHA START LIMITED POLY COVERED CORE PC 1425501.63
2 10003051 ALPHA START LIMITED SPUN POLYESTER SP 404370.41
3 10003051 ALPHA START LIMITED TRILOBAL AIR ENTANGLED POLY TL 9700
4 10003051 ALPHA START LIMITED SAK COTTON CS 38.3
5 10003051 ALPHA START LIMITED FILAMENT POLYESTER FP 3960
6 10003051 ALPHA START LIMITED COTTON COVERED CORE CC 3715.84
7 10000373 AMANN ASIA LIMITED POLY COVERED CORE PC 5246563.21
8 10000373 AMANN ASIA LIMITED TEXTURED POLYESTER TP 693569.06
9 10000373 AMANN ASIA LIMITED SPUN POLYESTER SP 39873.6结果为下面才是对的:
1 10003051 ALPHA START LIMITED POLY COVERED CORE PC 1425501.63
2 10003051 ALPHA START LIMITED SPUN POLYESTER SP 404370.41
3 10003051 ALPHA START LIMITED Others Others 17414.14
4 10000373 AMANN ASIA LIMITED POLY COVERED CORE PC 5246563.21
5 10000373 AMANN ASIA LIMITED TEXTURED POLYESTER TP 693569.06
6 10000373 AMANN ASIA LIMITED Others Others 39873.6
然后取前两条记录,后面的用others 代替,汇总金额成第三条记录,
也就是说不管原始记录有多少条,我只能取金额最高的两条和其它的汇总成一条记录,DRDL01变为others 即可例如记录为:
ADDRESS_NUMBER CUSTOMER DRDL01 IMSRP1 BEFORETWOYEAR
1 10003051 ALPHA START LIMITED POLY COVERED CORE PC 1425501.63
2 10003051 ALPHA START LIMITED SPUN POLYESTER SP 404370.41
3 10003051 ALPHA START LIMITED TRILOBAL AIR ENTANGLED POLY TL 9700
4 10003051 ALPHA START LIMITED SAK COTTON CS 38.3
5 10003051 ALPHA START LIMITED FILAMENT POLYESTER FP 3960
6 10003051 ALPHA START LIMITED COTTON COVERED CORE CC 3715.84
7 10000373 AMANN ASIA LIMITED POLY COVERED CORE PC 5246563.21
8 10000373 AMANN ASIA LIMITED TEXTURED POLYESTER TP 693569.06
9 10000373 AMANN ASIA LIMITED SPUN POLYESTER SP 39873.6结果为下面才是对的:
1 10003051 ALPHA START LIMITED POLY COVERED CORE PC 1425501.63
2 10003051 ALPHA START LIMITED SPUN POLYESTER SP 404370.41
3 10003051 ALPHA START LIMITED Others Others 17414.14
4 10000373 AMANN ASIA LIMITED POLY COVERED CORE PC 5246563.21
5 10000373 AMANN ASIA LIMITED TEXTURED POLYESTER TP 693569.06
6 10000373 AMANN ASIA LIMITED Others Others 39873.6
ADDRESS_NUMBER CUSTOMER DRDL01 IMSRP1 BEFORETWOYEAR
5列,下面值有9列
按哪几列分组,按金额排序取最高两条记录
order by ADDRESS,Amount desc 这又是什么意思
可以的话给出表结构测试数据,说明下
ADDRESS CUSTOMER DRDL01 IMSRP1 Amount
1 10003051 ALPHA START LIMITED POLY COVERED CORE PC 1425501.63
2 10003051 ALPHA START LIMITED SPUN POLYESTER SP 404370.41
3 10003051 ALPHA START LIMITED TRILOBAL AIR ENTANGLED POLY TL 9700
4 10003051 ALPHA START LIMITED SAK COTTON CS 38.3
5 10003051 ALPHA START LIMITED FILAMENT POLYESTER FP 3960
6 10003051 ALPHA START LIMITED COTTON COVERED CORE CC 3715.84
7 10000373 AMANN ASIA LIMITED POLY COVERED CORE PC 5246563.21
8 10000373 AMANN ASIA LIMITED TEXTURED POLYESTER TP 693569.06
9 10000373 AMANN ASIA LIMITED SPUN POLYESTER SP 39873.6结果为下面才是对的:
1 10003051 ALPHA START LIMITED POLY COVERED CORE PC 1425501.63
2 10003051 ALPHA START LIMITED SPUN POLYESTER SP 404370.41
3 10003051 ALPHA START LIMITED Others Others 17414.14
4 10000373 AMANN ASIA LIMITED POLY COVERED CORE PC 5246563.21
5 10000373 AMANN ASIA LIMITED TEXTURED POLYESTER TP 693569.06
6 10000373 AMANN ASIA LIMITED Others Others 39873.6
address VARCHAR2(20),
customer VARCHAR2(30),
drdl01 VARCHAR2(10),
imsrp1 VARCHAR2(10),
amount NUMBER(18,2) );INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10003051', 'ALPHA','POLY COVERED CORE','PC', 1425501.63);
INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10003051', 'ALPHA','SPUN POLYESTER ','SP', 404370.41);
INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10003051', 'ALPHA','TRILOBAL AIR ENTANGLEd','TL', 9700);
INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10003051', 'ALPHA','SAK COTTON ','CS', 38.3);
INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10003051', 'ALPHA','FILAMENT POLYESTER ','FP', 3960);
INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10003051', 'ALPHA', 'COTTON COVERED CORE ','CC', 3715.84);INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10000373', 'AMANN', 'POLY COVERED CORE','PC', 5246563.21);
INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10000373', 'AMANN', 'TEXTURED POLYESTER','TP', 693569.06);
INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10000373', 'AMANN', 'SPUN POLYESTER','SP', 39873.6);COMMIT;
--用个老土方法
with temp as
(select t.*,dense_rank()over(partition by t.address,t.customer order by t.amount) rn from test3 t)
select t.address,t.customer,sum(t.amount) as amount
from temp t
where t.rn>=3
group by t.address,t.customer
union all
select t.address,t.customer,t.amount as amount
from temp t
where t.rn<3ADDRESS CUSTOMER AMOUNT
10000373 AMANN 5246563.21
10003051 ALPHA 1843532.04
10000373 AMANN 39873.6
10000373 AMANN 693569.06
10003051 ALPHA 38.3
10003051 ALPHA 3715.84