繁体   English   中英

子查询总和

[英]Sum in subquery

我的查询是

select count(*) as cnt,
       EXTRACT(day FROM current_date - min(txdate))::int as days,

       sum (Select opening from acledgerbal l 
              where acname='Arv' 
              union all 
              Select sum(v2.debit-v2.credit) as opening from acvoucher2 v2 where
              txdate<='05/03/2014') as opening

from acduebills acb,acledger l 

where (acb.opening+acb.debit-acb.credit) > 0 
   and acb.unitname='Sales' 
   and l.acname='Arv' 
   and l.acno=acb.acno

此处显示more than one row returned by a subquery used as an expression Error。 如何将sum用于子查询。

我正在使用PostgreSQL 9.1

编辑:

我想获取acduebills表中的行数,即(acb.opening + acb.debit-acb.credit)> 0和acb.unitname ='Sales'。 之后,我想获得在相同条件下的最小日期的天数差异。 之后,我要开始打开,它来自两个表: acledgerbalacvoucher2 acvoucher是通过txdate条件检查的。

如何在单个查询中获取那些详细信息? 如何在多个架构中获取相同的详细信息?

问题在下面的语句中:

   sum (  Select opening from acledgerbal l 
          where acname='Arv' 
          union all 
          Select sum(v2.debit-v2.credit) as opening from acvoucher2 v2,
          txdate<='05/03/2014' ) 

您使用UNION,因此此子查询至少返回2行。 因此,您将收到一个错误,即子查询不能返回多于一行:“子查询作为表达式返回的多于一行”

尝试将其更改为:

   (Select SUM(opening) from acledgerbal l WHERE acname='Arv')
   +  
   (Select SUM(v2.debit-v2.credit) as opening from acvoucher2 v2 
                                           WHERE txdate<='05/03/2014')

像这样:

SELECT count(*) AS cnt
     , current_date - min(txdate)::date AS days   -- subtract dates directly

     , (SELECT round(sum(opening)::numeric, 2)
        FROM  (
           SELECT opening
           FROM   acledgerbal
           WHERE  acname = 'Arv' 

           UNION ALL
           SELECT debit - credit
           FROM   acvoucher2
           WHERE  txdate <= '2014-05-03'
           ) sub
       ) AS opening
FROM   acduebills b
JOIN   acledger   l USING (acno)
WHERE ((b.opening + b.debit) - b.credit) > 0 
AND    b.unitname ='Sales' 
AND    l.acname = 'Arv';

round()到小数位仅适用于numeric类型,因此我将总和转换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM