【发布时间】:2020-10-21 18:30:02
【问题描述】:
我正在使用 Microsoft 分发的 AP 数据库。这有效:
USE AP
SELECT V.VendorName, InvoiceDate, InvoiceTotal
FROM Invoices I
INNER JOIN Vendors V ON I.VendorID = V.VendorID
WHERE InvoiceTotal >
(SELECT AVG(InvoiceTotal)
FROM Invoices)
ORDER BY InvoiceTotal
这不起作用:
SELECT AP.dbo.Invoices.InvoiceTotal, AP.dbo.Vendors.VendorName, AP.dbo.Invoices.InvoiceDate
FROM AP.dbo.Invoices INNER JOIN
AP.dbo.Vendors ON AP.dbo.Invoices.VendorID = AP.dbo.Vendors.VendorID
WHERE AP.dbo.Invoices.InvoiceTotal >
(SELECT AVG(AP.dbo.Invoices.InvoiceTotal) AS Expr1
FROM AP.dbo.Invoices AS Invoices_1)
我在上面的查询中得到的错误是:
消息 147,级别 15,状态 1,行 5 聚合可能不会出现在 WHERE 子句中,除非它位于 HAVING 子句或选择列表中包含的子查询中,并且被聚合的列是外部引用。
【问题讨论】:
-
拥有两个 AP.dbo.Invoices 的表别名...由于您已重命名子查询 AP.dbo.Invoices,因此 AVG() 中的列属于另一个 AP.dbo.Invoices 表实例.
标签: sql sql-server ssms