子查询返回的值超过1。当子查询遵循=时,这是不允许的

时间:2019-01-14 18:05:39

标签: sql subquery

我正在尝试从表格中查找12个月的AR金额。按计算的日期分组,该日期在单独的表上。这是查询:

    SELECT ROUND(SUM(bdr_hfl),2) AS AmountDC , datum
    FROM gbkmut with (NOLOCK)
    WHERE reknr in (1300,1320) 
        AND kstdrcode BETWEEN '00' AND '10'
        AND kstplcode = '00'
        AND transtype IN ('N', 'C', 'P') 
        AND ISNULL(transsubtype, '') <> 'X'
        AND datum <= (SELECT eddatum FROM perdat 
                        WHERE bkjrcode = 2019
                    GROUP BY EDDATUM)
    GROUP BY DATUM, BDR_HFL

我收到以下错误:  Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.1, Line 1

3 个答案:

答案 0 :(得分:0)

大概是您想要某种聚合。代替:

datum <= (SELECT eddatum FROM perdat WHERE bkjrcode = 2019 GROUP BY EDDATUM) 

也许你想要

datum <= (SELECT MIN(p.eddatum)
          FROM perdat p
          WHERE bkjrcode = 2019
         ) 

答案 1 :(得分:0)

我认为您想使用datepart,但是示例数据和所需的输出会很有帮助。

AND datepart(year,datum) = 2019

代替

AND datum <= (SELECT eddatum FROM perdat 
                WHERE bkjrcode = 2019
            GROUP BY EDDATUM)

答案 2 :(得分:0)

在子查询中,您从第二个表中获取的所有日期都小于2019,这是导致错误的原因。 如前所述,如果您尝试使用表2中的日期从表1中获取过去12个月的所有金额,则可以尝试以下操作。  -编写联接(日期col上tab1和tab2之间的左外部联接,并在where子句中提供使用间运算符或使用大于或小于运算符的日期条件。 例如:select round(a.col1,2),a.col2 from tab1 a inner join/ left outer join tab2 bon a.datecol=b.datecol Where a.cond1=xxxx and a.cond2=yyyy.....etc a.datecol>= ‘01-01-2018’ and a.datecol <=‘31-12-2018’

如果您不喜欢加入,可以尝试使用最小/最大运算符。

Select col1,col2 From tab1 where datecol>=(select min(datecol) from tab2 where yearpart(datecol)<‘2019’) and datecol>= select max(datecol) from tab2 where yearpart(datecol)<‘2019’)