下面的是SQL的原始数据,我需要下面的结果,怎么写SQL:
ADDRESS CUSTOMER DRDL01 IMSRP1 Amount
10003051 ALPHA START LIMITED POLY COVERED CORE PC 1425501.63
10003051 ALPHA START LIMITED SPUN POLYESTER SP 404370.41
10003051 ALPHA START LIMITED TRILOBAL AIR ENTANGLED POLY TL 9700
10003051 ALPHA START LIMITED SAK COTTON CS 38.3
10003051 ALPHA START LIMITED FILAMENT POLYESTER FP 3960
10003051 ALPHA START LIMITED COTTON COVERED CORE CC 3715.84
要得到的结果:
10003051 ALPHA START LIMITED POLY COVERED CORE PC 1425501.63
10003051 ALPHA START LIMITED SPUN POLYESTER SP 404370.41
10003051 ALPHA START LIMITED OTHERS OTHERS 17414.14就是按order by ADDRESS,Amount desc ,
然后取前两条记录,后面的用others 代替,汇总金额成第三条记录,
也就是说不管原始记录有多少条,我只能去金额最高的两条和其它的汇总成一条记录,DRDL01变为others 即可.
ADDRESS CUSTOMER DRDL01 IMSRP1 Amount
10003051 ALPHA START LIMITED POLY COVERED CORE PC 1425501.63
10003051 ALPHA START LIMITED SPUN POLYESTER SP 404370.41
10003051 ALPHA START LIMITED TRILOBAL AIR ENTANGLED POLY TL 9700
10003051 ALPHA START LIMITED SAK COTTON CS 38.3
10003051 ALPHA START LIMITED FILAMENT POLYESTER FP 3960
10003051 ALPHA START LIMITED COTTON COVERED CORE CC 3715.84
要得到的结果:
10003051 ALPHA START LIMITED POLY COVERED CORE PC 1425501.63
10003051 ALPHA START LIMITED SPUN POLYESTER SP 404370.41
10003051 ALPHA START LIMITED OTHERS OTHERS 17414.14就是按order by ADDRESS,Amount desc ,
然后取前两条记录,后面的用others 代替,汇总金额成第三条记录,
也就是说不管原始记录有多少条,我只能去金额最高的两条和其它的汇总成一条记录,DRDL01变为others 即可.
解决方案 »
- 急!求助!如何列变行,去除重复数据
- oralce 变量绑定问题请教
- 求高手帮忙算一组数据
- oracle服务器安装后,其他计算机通过配置本地网络服务名访问该服务器时,总是无法连接成功!
- 找高手帮我看看这个存储过程存在的问题
- 怎么解决这个问题?急!
- 怎样在SQLPLUS中登陆SYSDBA连接的数据库?
- 如何将Access数据库的数据合excel表的数据导入到oracle数据库中?
- Oracle错误:ORA-01033: ORACLE initialization or shutdown in progress
- 如何只导出数据库中的存储过程和函数,导成一个文本文件形式,用EXP命令,谢谢
- oracle 两列变一列
- 表优化
CREATE TABLE test3(
address VARCHAR2(20),
customer VARCHAR2(10),
drdl01 VARCHAR2(10),
imsrp1 VARCHAR2(50),
amount NUMBER(18,2) );-----------------------------------------------------------------------------
INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10003051', 'ALPHA', 'START LIMITED POLY COVERED CORE PC', 1425501.63);
INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10003051', 'ALPHA', 'START LIMITED SPUN POLYESTER SP', 404370.41);
INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10003051', 'ALPHA', 'START LIMITED TRILOBAL AIR ENTANGLED POLY TL', 9700);
INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10003051', 'ALPHA', 'START LIMITED SAK COTTON CS', 38.3);
INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10003051', 'ALPHA', 'START LIMITED FILAMENT POLYESTER FP', 3960);
INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10003051', 'ALPHA', 'START LIMITED COTTON COVERED CORE CC', 3715.84);
min(CUSTOMER) CUSTOMER,
decode(rownum, 1, DRDL01, 2, DRDL01, 'START LIMITED OTHERS') DRDL01,
decode(rownum, 1, IMSRP1, 2, IMSRP1, 'OTHERS') IMSRP1,
sum(Amount) Amount
from (select ADDRESS, CUSTOMER, DRDL01, IMSRP1, Amount
from tab t
order by Amount desc)
group by decode(rownum, 1, IMSRP1, 2, IMSRP1, 'OTHERS')
order by min(rownum)
CREATE TABLE test3(
address VARCHAR2(20),
customer VARCHAR2(10),
drdl01 VARCHAR2(10),
imsrp1 VARCHAR2(50),
amount NUMBER(18,2) );-----------------------------------------------------------------------------
INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10003051', 'ALPHA', 'START', 'LIMITED POLY COVERED CORE PC', 1425501.63);
INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10003051', 'ALPHA', 'START', 'LIMITED SPUN POLYESTER SP', 404370.41);
INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10003051', 'ALPHA', 'START', 'LIMITED TRILOBAL AIR ENTANGLED POLY TL', 9700);
INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10003051', 'ALPHA', 'START', 'LIMITED SAK COTTON CS', 38.3);
INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10003051', 'ALPHA', 'START', 'LIMITED FILAMENT POLYESTER FP', 3960);
INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10003051', 'ALPHA', 'START', 'LIMITED COTTON COVERED CORE CC', 3715.84);COMMIT;
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 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;
min(CUSTOMER) CUSTOMER,
min(decode(rn, 1, DRDL01, 2, DRDL01, 'START LIMITED OTHERS')) DRDL01,
decode(rn, 1, IMSRP1, 2, IMSRP1, 'OTHERS') IMSRP1,
sum(Amount) Amount
from (select ADDRESS, CUSTOMER, DRDL01, IMSRP1, Amount, row_number()over(partition by ADDRESS order by ADDRESS desc,Amount desc) rn
from test3 t)
group by ADDRESS,decode(rn, 1, IMSRP1, 2, IMSRP1, 'OTHERS')
order by ADDRESS,min(rn)
1 10000373 AMANN POLY COVERED CORE PC 5246563.21
2 10000373 AMANN TEXTURED POLYESTER TP 693569.06
3 10000373 AMANN START LIMITED OTHERS OTHERS 39873.6
4 10003051 ALPHA POLY COVERED CORE PC 1425501.63
5 10003051 ALPHA SPUN POLYESTER SP 404370.41
6 10003051 ALPHA START LIMITED OTHERS OTHERS 17414.14
address VARCHAR2(20),
customer VARCHAR2(10),
drdl01 VARCHAR2(10),
imsrp1 VARCHAR2(50),
amount NUMBER(18,2) );-----------------------------------------------------------------------------
INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10003051', 'ALPHA', 'START', 'LIMITED POLY COVERED CORE PC', 1425501.63);
INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10003051', 'ALPHA', 'START', 'LIMITED SPUN POLYESTER SP', 404370.41);
INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10003051', 'ALPHA', 'START', 'LIMITED TRILOBAL AIR ENTANGLED POLY TL', 9700);
INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10003051', 'ALPHA', 'START', 'LIMITED SAK COTTON CS', 38.3);
INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10003051', 'ALPHA', 'START', 'LIMITED FILAMENT POLYESTER FP', 3960);
INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10003051', 'ALPHA', 'START', 'LIMITED COTTON COVERED CORE CC', 3715.84);
INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10000373', 'AMANN', 'ASIA', 'LIMITED POLY COVERED CORE PC', 5246563.21);
INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10000373', 'AMANN', 'ASIA', 'LIMITED TEXTURED POLYESTER TP', 693569.06);
INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10000373', 'AMANN', 'ASIA', 'LIMITED SPUN POLYESTER SP', 39873.6);COLUMN address FOR A8
COLUMN customer FOR a6
COLUMN drdl01 FOR a6
COLUMN imsrp1 FOR a38
COLUMN amount FOR 9999999.99SELECT address, customer, drdl01,
decode(rcn,1,imsrp1,2,imsrp1,'Othres Othres') imsrp1,
sum(amount) amount
FROM
(
SELECT ROW_NUMBER() OVER (PARTITION BY address, customer, drdl01 ORDER BY amount desc) rcn,
address, customer, drdl01, imsrp1, amount
FROM test3
) t
GROUP BY address, customer, drdl01, decode(rcn,1,imsrp1,2,imsrp1,'Othres Othres')
ORDER BY address, customer, drdl01, imsrp1;
---------------------------------------------------------------------------------------------------
ADDRESS CUSTOM DRDL01 IMSRP1 AMOUNT
-------- ------ ------ -------------------------------------- -----------
10000373 AMANN ASIA LIMITED POLY COVERED CORE PC 5246563.21
10000373 AMANN ASIA LIMITED TEXTURED POLYESTER TP 693569.06
10000373 AMANN ASIA Othres Othres 39873.60
10003051 ALPHA START LIMITED SPUN POLYESTER SP 404370.41
10003051 ALPHA START LIMITED TRILOBAL AIR ENTANGLED POLY TL 9700.00
10003051 ALPHA START Othres Othres 7714.14
address VARCHAR2(20),
customer VARCHAR2(10),
drdl01 VARCHAR2(10),
imsrp1 VARCHAR2(50),
amount NUMBER(18,2) );-----------------------------------------------------------------------------
INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10003051', 'ALPHA', 'START', 'LIMITED POLY COVERED CORE PC', 1425501.63);
INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10003051', 'ALPHA', 'START', 'LIMITED SPUN POLYESTER SP', 404370.41);
INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10003051', 'ALPHA', 'START', 'LIMITED TRILOBAL AIR ENTANGLED POLY TL', 9700);
INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10003051', 'ALPHA', 'START', 'LIMITED SAK COTTON CS', 38.3);
INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10003051', 'ALPHA', 'START', 'LIMITED FILAMENT POLYESTER FP', 3960);
INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10003051', 'ALPHA', 'START', 'LIMITED COTTON COVERED CORE CC', 3715.84);
INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10000373', 'AMANN', 'ASIA', 'LIMITED POLY COVERED CORE PC', 5246563.21);
INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10000373', 'AMANN', 'ASIA', 'LIMITED TEXTURED POLYESTER TP', 693569.06);
INSERT INTO test3(address,customer,drdl01,imsrp1,amount) VALUES('10000373', 'AMANN', 'ASIA', 'LIMITED SPUN POLYESTER SP', 39873.6);COMMIT;COLUMN address FOR A8
COLUMN customer FOR a6
COLUMN drdl01 FOR a6
COLUMN imsrp1 FOR a38
COLUMN amount FOR 9999999.99SELECT address, customer, drdl01,
decode(rcn,1,imsrp1,2,imsrp1,'Othres Othres') imsrp1,
sum(amount) amount
FROM
(
SELECT ROW_NUMBER() OVER (PARTITION BY address, customer, drdl01 ORDER BY amount desc) rcn,
address, customer, drdl01, imsrp1, amount
FROM test3
) t
GROUP BY address, customer, drdl01, decode(rcn,1,imsrp1,2,imsrp1,'Othres Othres')
ORDER BY address, customer, drdl01, imsrp1;
---------------------------------------------------------------------------------------------------
ADDRESS CUSTOM DRDL01 IMSRP1 AMOUNT
-------- ------ ------ -------------------------------------- -----------
10000373 AMANN ASIA LIMITED POLY COVERED CORE PC 5246563.21
10000373 AMANN ASIA LIMITED TEXTURED POLYESTER TP 693569.06
10000373 AMANN ASIA Othres Othres 39873.60
10003051 ALPHA START LIMITED POLY COVERED CORE PC 1425501.63
10003051 ALPHA START LIMITED SPUN POLYESTER SP 404370.41
10003051 ALPHA START Othres Othres 17414.14
ADDRESS_NUMBER CUSTOMER DRDL01 IMSRP1 BEFORETWOYEAR
1 10003051 ALPHA START LIMITED POLY COVERED CORE PC 1425501.63
2 10……贴上脚本是最好的