无法在SQL内部的子查询中使用别名

发布于 2025-02-07 23:25:36 字数 331 浏览 3 评论 0原文

我正在尝试在选择语句中的子查询中使用一个类似的别名,如下所示:

SELECT 
     InvoiceId,
     InvoiceTotal,
     (SELECT 
       AVG(InvoiceTotal)
       FROM Invoices) AS InvoiceAverage,
     InvoiceTotal - (SELECT InvoiceAverage)
FROM Invoices;

当我尝试执行查询时,我会收到此错误:

“无效列”名称“ InvoICeavering”。

I'm trying to use an alias inside a subquery in a select statement like the one below:

SELECT 
     InvoiceId,
     InvoiceTotal,
     (SELECT 
       AVG(InvoiceTotal)
       FROM Invoices) AS InvoiceAverage,
     InvoiceTotal - (SELECT InvoiceAverage)
FROM Invoices;

When I try to execute the query I get this error:

'Invalid column name 'InvoiceAverage'.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

要走就滚别墨迹 2025-02-14 23:25:36

这里无需在此处使用子查询,请使用窗口的聚合物:

SELECT InvoiceId,
       InvoiceTotal,
       AVG(InvoiceTotal) OVER () AS InvoiceAverage,
       InvoiceTotal - AVG(InvoiceTotal) OVER () AS YourAliasGoesHere
FROM dbo.Invoices;

No need for a subquery here, use windowed aggregates:

SELECT InvoiceId,
       InvoiceTotal,
       AVG(InvoiceTotal) OVER () AS InvoiceAverage,
       InvoiceTotal - AVG(InvoiceTotal) OVER () AS YourAliasGoesHere
FROM dbo.Invoices;
醉殇 2025-02-14 23:25:36

您可以直接从InvoIcetotal AS直接减去子查询值

SELECT 
     InvoiceId,
     InvoiceTotal,
     (SELECT AVG(InvoiceTotal) FROM Invoices) AS InvoiceAverage,
     (InvoiceTotal - (SELECT AVG(InvoiceTotal) FROM Invoices)) AS InvoiceCalculatedValue
FROM Invoices;

,也可以将AVG值存储在变量中并在选择查询中使用

DECLARE @InvoiceAverage AS DECIMAL (18,2) = 0;
SELECT @InvoiceAverage = AVG(InvoiceTotal) FROM Invoices;

SELECT 
     InvoiceId,
     InvoiceTotal,
     @InvoiceAverage AS InvoiceAverage
     (InvoiceTotal - @InvoiceAverage) AS InvoiceCalculatedValue
FROM Invoices;

You may directly minus the sub query value from InvoiceTotal as

SELECT 
     InvoiceId,
     InvoiceTotal,
     (SELECT AVG(InvoiceTotal) FROM Invoices) AS InvoiceAverage,
     (InvoiceTotal - (SELECT AVG(InvoiceTotal) FROM Invoices)) AS InvoiceCalculatedValue
FROM Invoices;

or you may store the AVG value in a variable and use in the select query

DECLARE @InvoiceAverage AS DECIMAL (18,2) = 0;
SELECT @InvoiceAverage = AVG(InvoiceTotal) FROM Invoices;

SELECT 
     InvoiceId,
     InvoiceTotal,
     @InvoiceAverage AS InvoiceAverage
     (InvoiceTotal - @InvoiceAverage) AS InvoiceCalculatedValue
FROM Invoices;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文