1

我的 SQL 查询有问题,事实上,当我尝试执行此操作时,我有这样的响应:我想要做的是计算总和和计数

你能帮我吗 ?十分感谢

ORA-00913:太多值 00913. 00000 - “太多值” *原因:
*操作:Erreur à la ligne 2,colonne 5


select distinct 
(select sum(che1.mon), count(che1.typ)
from awbeprod_fr.CHE_BKFRACOMC che1 
where che.ncp = che1.ncp and che.pie=che1.pie and che.typ in ('T','C')),

(select sum(che1.mon) 
from awbeprod_fr.CHE_BKFRACOMC che1 
where che.ncp = che1.ncp and che.typ = che1.typ and che.typ ='F'),

che.ncp, 
m.cpro, m.age,  m.ribdec,  m.dev,
p.lib, cli.cli, cli.pre, cli.nom, 
adcli.adr1, adcli.adr2, adcli.adr3, adcli.cpos, adcli.ville
from 
awbeprod_fr.CHE_BKFRACOMC che, awbeprod_fr.bkcom m, 
awbeprod_fr.bkprod p, awbeprod_fr.bkcli cli, 
awbeprod_fr.bkadcli adcli
where che.ncp = m.ncp 
and che.cli = m.cli and m.cli = cli.cli
and cli.cli = adcli.cli and m.cpro = p.cpro
and che.ncp = '11000003415'
order by che.ncp

4

2 回答 2

2

ANSI JOIN 的使用将使您的请求更清晰,而 GROUP BY 的使用应该可以帮助您“多合一”。

SELECT 
SUM (CASE WHEN che.typ in ('T', 'C') THEN che.mon ELSE 0 END) sumMonTC,
SUM (CASE WHEN che.typ in ('T', 'C') THEN 1       ELSE 0 END) cntMonTC,
SUM (CASE WHEN che.typ ='F'          THEN che.mon ELSE 0 END) sumMonF,
che.ncp, 
m.cpro, m.age,  m.ribdec,  m.dev,
p.lib, cli.cli, cli.pre, cli.nom, 
adcli.adr1, adcli.adr2, adcli.adr3, adcli.cpos, adcli.ville

FROM awbeprod_fr.CHE_BKFRACOMC che
    INNER JOIN awbeprod_fr.bkcom m ON che.ncp = m.ncp AND che.cli = m.cli
    INNER JOIN awbeprod_fr.bkprod p ON m.cpro = p.cpro
    INNER JOIN awbeprod_fr.bkcli cli ON m.cli = cli.cli
    INNER JOIN awbeprod_fr.bkadcli adcli on cli.cli = adcli.cli
WHERE che.ncp = '11000003415'
GROUP BY che.ncp, 
m.cpro, m.age,  m.ribdec,  m.dev,
p.lib, cli.cli, cli.pre, cli.nom, 
adcli.adr1, adcli.adr2, adcli.adr3, adcli.cpos, adcli.ville
ORDER BY che.ncp
于 2013-01-28T13:37:49.703 回答
0

如果您使用子查询,则必须返回一个值,而不是两个或更多。因此,只需将您的第一个子查询分为两个:

select distinct 
(select sum(che1.mon)
from awbeprod_fr.CHE_BKFRACOMC che1 
where che.ncp = che1.ncp and che.pie=che1.pie and che.typ in ('T','C')),

(select count(che1.typ)
from awbeprod_fr.CHE_BKFRACOMC che1 
where che.ncp = che1.ncp and che.pie=che1.pie and che.typ in ('T','C')),

(select sum(che1.mon) 
from awbeprod_fr.CHE_BKFRACOMC che1 
where che.ncp = che1.ncp and che.typ = che1.typ and che.typ ='F'),

che.ncp, 
m.cpro, m.age,  m.ribdec,  m.dev,
p.lib, cli.cli, cli.pre, cli.nom, 
adcli.adr1, adcli.adr2, adcli.adr3, adcli.cpos, adcli.ville
from 
awbeprod_fr.CHE_BKFRACOMC che, awbeprod_fr.bkcom m, 
awbeprod_fr.bkprod p, awbeprod_fr.bkcli cli, 
awbeprod_fr.bkadcli adcli
where che.ncp = m.ncp 
and che.cli = m.cli and m.cli = cli.cli
and cli.cli = adcli.cli and m.cpro = p.cpro
and che.ncp = '11000003415'
order by che.ncp
于 2013-01-28T13:29:08.447 回答