我在 SQL 服务器中遇到此错误 - "Cannot perform an aggregate function on an expression containing an aggregate or a subquery."
I am facing this error in SQL Server - "Cannot perform an aggregate function on an expression containing an aggregate or a subquery."
我正在尝试 运行 以下查询,但遇到此错误:
Cannot perform an aggregate function on an expression containing an aggregate or a subquery.
SELECT
IVCSUM1.ivcnum "Invoice Number"
,IVCSUM1.ivcgrsamt_amt "Gross Amount"
,IVCSUM1.ivcgrsamt_cur "Gross Amount Currency"
,SUM(ISNULL(IVCLINE1.ivclinextamt_amt, 0)
+ ISNULL((SELECT SUM(TaxAmount_amt) FROM MC_INVTAX WHERE ivclinref_oi = IVCLINE1.ivlnoi), 0)
+ ISNULL((SELECT SUM(amtchg_amt) FROM MC_INVCHG INVCHG1 WHERE IVCLINE1.ivlnoi = ivclinref_oi), 0)) "Invoice Line Amount"
FROM
MC_IVCSUM IVCSUM1 LEFT JOIN
MC_IVCLINE IVCLINE1 on IVCSUM1.ivsmoi = IVCLINE1.invsumm_oi
GROUP BY ivsmoi, ivcnum,IVCSUM1.ivcgrsamt_amt, IVCSUM1.ivcgrsamt_cur
我无法将表 MC_INVCHG 和 MC_INVTAX 连接到主查询,因为它会导致重复IVCLINE1.ivclinextamt_amt 字段和总和最终是错误的。
下面是我通过连接表格从表格中提取的示例数据。
Invoice Number
Line
Gross Amount
Tax amount
Change
00 0001180 7 DEC03
1
80
-5.04
NULL
00 0001180 7 DEC03
1
80
5.04
NULL
00 0001180 7 DEC03
2
40
2
NULL
我想通过查询完成的是,发票行金额 = (80 + (5.04 + (-5.04)) + 0) + (40 + 2 + 0)
由于更改为 NULL,因此它被视为 0。
有没有其他方法可以做到这一点?
这是使用 CROSS APPLY
的好地方,因为它允许您计算一个值然后使用它,而没有您已经 运行 进入的限制。
SELECT
IVCSUM1.ivcnum [Invoice Number]
, IVCSUM1.ivcgrsamt_amt [Gross Amount]
, IVCSUM1.ivcgrsamt_cur [Gross Amount Currency]
, SUM(ISNULL(IVCLINE1.ivclinextamt_amt, 0)
+ ISNULL(S1.TaxAmount_amt_Total, 0)
+ ISNULL(S2.amtchg_amt_Total, 0)) [Invoice Line Amount]
FROM MC_IVCSUM IVCSUM1
LEFT JOIN MC_IVCLINE IVCLINE1 on IVCSUM1.ivsmoi = IVCLINE1.invsumm_oi
CROSS APPLY (
SELECT SUM(TaxAmount_amt) TaxAmount_amt_Total
FROM MC_INVTAX
WHERE ivclinref_oi = IVCLINE1.ivlnoi
) S1
CROSS APPLY (
SELECT SUM(amtchg_amt) amtchg_amt_Total
FROM MC_INVCHG INVCHG1
WHERE IVCLINE1.ivlnoi = ivclinref_oi
) S2
GROUP BY ivsmoi, ivcnum, IVCSUM1.ivcgrsamt_amt, IVCSUM1.ivcgrsamt_cur;
注意方括号 []
是转义对象名称的最佳做法。
我正在尝试 运行 以下查询,但遇到此错误:
Cannot perform an aggregate function on an expression containing an aggregate or a subquery.
SELECT
IVCSUM1.ivcnum "Invoice Number"
,IVCSUM1.ivcgrsamt_amt "Gross Amount"
,IVCSUM1.ivcgrsamt_cur "Gross Amount Currency"
,SUM(ISNULL(IVCLINE1.ivclinextamt_amt, 0)
+ ISNULL((SELECT SUM(TaxAmount_amt) FROM MC_INVTAX WHERE ivclinref_oi = IVCLINE1.ivlnoi), 0)
+ ISNULL((SELECT SUM(amtchg_amt) FROM MC_INVCHG INVCHG1 WHERE IVCLINE1.ivlnoi = ivclinref_oi), 0)) "Invoice Line Amount"
FROM
MC_IVCSUM IVCSUM1 LEFT JOIN
MC_IVCLINE IVCLINE1 on IVCSUM1.ivsmoi = IVCLINE1.invsumm_oi
GROUP BY ivsmoi, ivcnum,IVCSUM1.ivcgrsamt_amt, IVCSUM1.ivcgrsamt_cur
我无法将表 MC_INVCHG 和 MC_INVTAX 连接到主查询,因为它会导致重复IVCLINE1.ivclinextamt_amt 字段和总和最终是错误的。
下面是我通过连接表格从表格中提取的示例数据。
Invoice Number | Line | Gross Amount | Tax amount | Change |
---|---|---|---|---|
00 0001180 7 DEC03 | 1 | 80 | -5.04 | NULL |
00 0001180 7 DEC03 | 1 | 80 | 5.04 | NULL |
00 0001180 7 DEC03 | 2 | 40 | 2 | NULL |
我想通过查询完成的是,发票行金额 = (80 + (5.04 + (-5.04)) + 0) + (40 + 2 + 0)
由于更改为 NULL,因此它被视为 0。
有没有其他方法可以做到这一点?
这是使用 CROSS APPLY
的好地方,因为它允许您计算一个值然后使用它,而没有您已经 运行 进入的限制。
SELECT
IVCSUM1.ivcnum [Invoice Number]
, IVCSUM1.ivcgrsamt_amt [Gross Amount]
, IVCSUM1.ivcgrsamt_cur [Gross Amount Currency]
, SUM(ISNULL(IVCLINE1.ivclinextamt_amt, 0)
+ ISNULL(S1.TaxAmount_amt_Total, 0)
+ ISNULL(S2.amtchg_amt_Total, 0)) [Invoice Line Amount]
FROM MC_IVCSUM IVCSUM1
LEFT JOIN MC_IVCLINE IVCLINE1 on IVCSUM1.ivsmoi = IVCLINE1.invsumm_oi
CROSS APPLY (
SELECT SUM(TaxAmount_amt) TaxAmount_amt_Total
FROM MC_INVTAX
WHERE ivclinref_oi = IVCLINE1.ivlnoi
) S1
CROSS APPLY (
SELECT SUM(amtchg_amt) amtchg_amt_Total
FROM MC_INVCHG INVCHG1
WHERE IVCLINE1.ivlnoi = ivclinref_oi
) S2
GROUP BY ivsmoi, ivcnum, IVCSUM1.ivcgrsamt_amt, IVCSUM1.ivcgrsamt_cur;
注意方括号 []
是转义对象名称的最佳做法。