我正在尝试从表格中查找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
。
答案 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’)