ORA-01427: 单行子查询返回多于一个行,请问怎么改

SELECT GSBM,
(SELECT sum(b.assvalue) FROM t_jplods_gssb a inner join t_jplods_gssbsub b on a.docid=b.pdocid where year=to_char(sysdate,'yyyy') and month=to_char(sysdate,'mm')-1 and asstype='人工工时' group by GSBM )as bb,
(SELECT sum(b.assvalue) FROM t_jplods_gssb a inner join t_jplods_gssbsub b on a.docid=b.pdocid where year=to_char(sysdate,'yyyy') and month=to_char(sysdate,'mm')-1 and asstype='生产量' group by GSBM) as cc
FROM t_jplods_gssb a inner join t_jplods_gssbsub b on a.docid=b.pdocid where year=to_char(sysdate,'yyyy') and month=to_char(sysdate,'mm')-1 group by GSBM
如果要同时获得两列的商值?

把括号里的 group by gsbm 全部改为 and gsbm = a.gsbm 即可。追问

改了之后执行结果为合计数,未按GSBM分类为什么?

追答

select dd.gsbm,
(select sum(b.assvalue)
from t_jplods_gssb a
inner join t_jplods_gssbsub b on a.docid = b.pdocid
where year = to_char(sysdate, 'yyyy')
and month = to_char(sysdate, 'mm') - 1
and asstype = '人工工时'
and a.gsbm = dd.gsbm) as bb,
(select sum(b.assvalue)
from t_jplods_gssb a
inner join t_jplods_gssbsub b on a.docid = b.pdocid
where year = to_char(sysdate, 'yyyy')
and month = to_char(sysdate, 'mm') - 1
and asstype = '生产量'
and a.gsbm = dd.gsbm) as cc,
(select sum(b.assvalue)
from t_jplods_gssb a
inner join t_jplods_gssbsub b on a.docid = b.pdocid
where year = to_char(sysdate, 'yyyy')
and month = to_char(sysdate, 'mm') - 1
and asstype = '生产量'
and a.gsbm = dd.gsbm) /
(select sum(b.assvalue)
from t_jplods_gssb a
inner join t_jplods_gssbsub b on a.docid = b.pdocid
where year = to_char(sysdate, 'yyyy')
and month = to_char(sysdate, 'mm') - 1
and asstype = '人工工时'
and a.gsbm = dd.gsbm) "商"
from t_jplods_gssb dd
inner join t_jplods_gssbsub ee on dd.docid = ee.pdocid
where year = to_char(sysdate, 'yyyy')
and month = to_char(sysdate, 'mm') - 1
group by dd.gsbm

这样修改

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-10-20
呵呵,子查询都没关联上主查询表的条件嘛,肯定不过

把子查询中的group by gsbm去掉,改为 and gsbm=a.gsbm就行了,a.gsbm即主查询表的关联条件
相似回答