子查询返回的值超过1

时间:2014-02-03 04:25:06

标签: sql sql-server syntax subquery

我正在尝试用html制作一个“销售业绩”表。  这是查询:

select DR.ACCNO, DR.NAME, DR.X_MONTHLYTARGET, DR.AGEDBAL0, DR.LASTMONTH, DR.MONTHVAL,
    (select SUM(ASI.SalesValueTaxExclusive) 
from dbo.DR_ACCS DR     
        inner join dbo.Analytics_SaleInvoice ASI on DR.ACCNO = ASI.AccountNumberAnalysis
     where ASI.PeriodID = 229      and DR.X_TOPCUSTOMER = 'Y' 
    group by DR.ACCNO) as nov    

from dbo.DR_ACCS DR    
where X_TOPCUSTOMER = 'Y'   
group by DR.ACCNO, DR.NAME, DR.X_MONTHLYTARGET, DR.AGEDBAL0, DR.LASTMONTH, DR.MONTHVAL

超过1个结果只是摔倒了。 我试图制作其他帖子的头/尾,但我迷路了。

任何帮助表示感谢。

3 个答案:

答案 0 :(得分:1)

问题是这个子查询:

(select SUM(ASI.SalesValueTaxExclusive) 
 from dbo.DR_ACCS DR inner join
      dbo.Analytics_SaleInvoice ASI
      on DR.ACCNO = ASI.AccountNumberAnalysis
 where ASI.PeriodID = 229  and DR.X_TOPCUSTOMER = 'Y' 
 group by DR.ACCNO
-^
) as nov 

如突出显示的那样,问题是group by。相反,您需要一个相关的子查询:

(select SUM(ASI.SalesValueTaxExclusive) 
 from dbo.Analytics_SaleInvoice ASI
 where DR.ACCNO = ASI.AccountNumberAnalysis and
       ASI.PeriodID = 229  and DR.X_TOPCUSTOMER = 'Y' 
) as nov 

这将删除子查询中对DR_ACCS的不必要的表引用。所以,现在条件引用了外部查询中的表。在这种情况下,您不需要group by子句。子查询一次只聚合一个帐户。

编辑:

此完整查询应该有效:

select DR.ACCNO, DR.NAME, DR.X_MONTHLYTARGET, DR.AGEDBAL0, DR.LASTMONTH, DR.MONTHVAL,
       (select SUM(ASI.SalesValueTaxExclusive) 
        from dbo.Analytics_SaleInvoice ASI
        where DR.ACCNO = ASI.AccountNumberAnalysis and
              ASI.PeriodID = 229 and
       ) as nov 
from dbo.DR_ACCS DR    
where X_TOPCUSTOMER = 'Y'   
group by DR.ACCNO, DR.NAME, DR.X_MONTHLYTARGET, DR.AGEDBAL0, DR.LASTMONTH, DR.MONTHVAL;

条件DR.X_TOPCUSTOMER = 'Y'在子查询中是多余的,所以我将其删除了。

答案 1 :(得分:1)

您在子查询中使用group by。子查询不应返回多行。如果从子查询中删除group by子句,它应该可以工作。

答案 2 :(得分:0)

这清楚地表明由于

而从此查询返回多行
    (select SUM(ASI.SalesValueTaxExclusive) 
     from dbo.DR_ACCS DR     
     inner join dbo.Analytics_SaleInvoice ASI on DR.ACCNO = ASI.AccountNumberAnalysis
     where ASI.PeriodID = 229      and DR.X_TOPCUSTOMER = 'Y' 
     group by DR.ACCNO) as nov