gpt4 book ai didi

sql - 在 SQL 中除以 'Over' 子句有效但除以 'Alias' 不

转载 作者:行者123 更新时间:2023-12-04 20:57:56 28 4
gpt4 key购买 nike

在 MS SQL Server 中,我花了太多时间试图解决这个问题。我终于弄明白了,除了我不知道原因。为什么除以第 4 行中的 cast 语句会在下面起作用

SELECT 
cast(dbo.FACTINVOICEHEADER.TOTAL_NET_AMOUNT_AMOUNT AS decimal(18,8))
AS TOTAL_NET_AMOUNT_AMOUNT,
cast((SUM(dbo.FACTINVOICEHEADER.TOTAL_NET_AMOUNT_AMOUNT)
OVER (PARTITION BY dbo.DIMPROJECT.PROJECT_KEY)) AS decimal(18,8))
AS ActualAmountPaidOnProjectGroupedByInvoice,
((dbo.FACTINVOICEHEADER.TOTAL_NET_AMOUNT_AMOUNT)
/
(cast((SUM(dbo.FACTINVOICEHEADER.TOTAL_NET_AMOUNT_AMOUNT)
OVER (PARTITION BY dbo.DIMPROJECT.PROJECT_KEY)) AS decimal(18,8))))
AS 'Allocation_Amount',

但是,当我在第 3 行尝试除以我创建的别名“ActualAmountPaidOnMatterGroupedByInvoice”时,我收到一条错误消息:

Msg 207, Level 16, State 1, Line 131 Invalid column name 'ActualAmountPaidOnMatterGroupedByInvoice'

错误代码示例:

SELECT 
cast(dbo.FACTINVOICEHEADER.TOTAL_NET_AMOUNT_AMOUNT AS decimal(18,8))
AS TOTAL_NET_AMOUNT_AMOUNT,
cast((SUM(dbo.FACTINVOICEHEADER.TOTAL_NET_AMOUNT_AMOUNT)
OVER (PARTITION BY dbo.DIMPROJECT.PROJECT_KEY))
AS decimal(18,8))
AS ActualAmountPaidOnProjectGroupedByInvoice,
((dbo.FACTINVOICEHEADER.TOTAL_NET_AMOUNT_AMOUNT)
/
(ActualAmountPaidOnProjectGroupedByInvoice) AS decimal(18,8))))
AS 'Allocation_Amount'

怎么会?谢谢大家!

最佳答案

不能在查询中使用别名的原因是查询引擎尚未识别别名。引擎按以下顺序分阶段评估查询:

FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY -> LIMIT

SELECT 阶段的最后一个步骤是将查询中指定的别名应用于生成的数据集。由于这些直到 SELECT 阶段结束才应用,因此它们在要返回的数据的评估中不可用,也不在 WHEREGROUP BY ,或 HAVING 个阶段。

此外,一些查询引擎允许在 ORDER BY 阶段使用别名(或序号位置)。正如 Julian 在评论中指出的那样,MSSQL 确实允许顺序位置排序语法。

关于sql - 在 SQL 中除以 'Over' 子句有效但除以 'Alias' 不,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57129351/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com