ORA-01722错误消息:SUM DECODE SUBSTR

问题描述 投票:-1回答:1

我需要总计(tran_qty * PRICE)买入和卖出这是我想要的结果:

|CONTRACT| TRAN_QTY|PRICE
BUY         50    1.2
BUY         20    2.0
SELL        10    1.0
SELL        40    2.5

但是当我运行下面的查询时,我在第1行遇到了这个错误。

第1行的错误ORA-01722:无效的数字

我该怎么办?

SELECT sum(decode(substr(O.tran_no,1,1), 'B', 'BUY')) BUY,
       sum(decode(substr(O.tran_no,1,1),'S', 'SELL')) SELL,
       O.TRAN_QTY,
       O.PRICE,
       o.client_no,
       c.client_name,
       sum(o.tran_qty*o.price)total,
       o.branch_code,
       r.descr,
       O.CURRENCY,
       O.STOCK_NO,
       O.CSTAMP 
from bos_m_ledger o,bos_m_para r,bos_m_client c,bos_cltype g 
WHERE r.para_type='BRANCH' AND 
       R.PARA_CODE = O.BRANCH_CODE and 
       o.client_no=c.client_no and 
       g.nbrk_rate=1 and 
       c.client_type=g.client_type and 
       o.tdr_code=c.tdr_code and 
       o.tran_type= 'CON' AND 
       C.CLIENT_TYPE='6' 
group by substr(o.tran_no,1,1),
       o.client_no,
       o.branch_code,
       r.descr,
       c.client_name,
       O.CURRENCY,
       O.STOCK_NO,
       O.CSTAMP,
       O.TRAN_QTY,
       O.PRICE 
ORDER BY O.BRANCH_CODE, O.CLIENT_NO'
sql oracle
1个回答
0
投票

总结一串“买入”或“卖出”没有任何意义。我怀疑你正在尝试使用ORA-00979: not a GROUP BY expression错误。此外,当您尝试获得聚合总计时,在投影和group by子句中包含TRAN_QTYPRICE是没有意义的。

所以你需要做的就是这样:

SELECT decode(substr(O.tran_no,1,1), 'B', 'BUY' ,'S', 'SELL') as contract,
       o.client_no,
       c.client_name,
       sum(o.tran_qty*o.price) as total,
       o.branch_code,
       r.descr,
       O.CURRENCY,
       O.STOCK_NO,
       O.CSTAMP 
from bos_m_ledger o,bos_m_para r,bos_m_client c,bos_cltype g 
WHERE r.para_type='BRANCH' AND 
       R.PARA_CODE = O.BRANCH_CODE and 
       o.client_no=c.client_no and 
       g.nbrk_rate=1 and 
       c.client_type=g.client_type and 
       o.tdr_code=c.tdr_code and 
       o.tran_type= 'CON' AND 
       C.CLIENT_TYPE='6' 
group by decode(substr(O.tran_no,1,1), 'B', 'BUY' ,'S', 'SELL'),
       o.client_no,
       o.branch_code,
       r.descr,
       c.client_name,
       O.CURRENCY,
       O.STOCK_NO,
       O.CSTAMP
ORDER BY O.BRANCH_CODE, O.CLIENT_NO;
© www.soinside.com 2019 - 2024. All rights reserved.