[英]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'。 之后,我想获得在相同条件下的最小日期的天数差异。 之后,我要开始打开,它来自两个表: acledgerbal
和acvoucher2
。 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.