查询cte-无法绑定多部分标识符.如何解决此问题以便查询表?SQL会计背景新手



我正在尝试提取一个连接3个表的数据集

  • 员工E
  • 缺席类型AT
  • 缺勤余额AB

在数据集中,我需要AB.BalanceTime中每个AB.EmployeeUIDAB.AbsenceTypesUID的最新记录。

数据集与我需要的输出是正确的,当我查询CTE时它失败了。

;WITH cte AS
(
SELECT TOP (1000) 
AB.[UID],
AB.BalanceTime,
AB.AbsenceTypesUID,
AB.Mins,
E.FullName,
E.FirstName, E.LastName,
AB.EmployeeUID,
AT.LongName,
ROW_NUMBER() OVER(PARTITION BY AB.[UID], AB.EmployeeUID ORDER BY AB.BalanceTime DESC) AS RUN
FROM 
[RiteqDB].[dbo].[AbsenceBalance] AB
LEFT JOIN 
[RiteqDB].[dbo].Employee E ON AB.EmployeeUID = E.UID
LEFT JOIN 
[RiteqDB].[dbo].AbsenceTypes AT ON AB.AbsenceTypesUID = AT.UID
)
SELECT * 
FROM cte
WHERE RUN = 1 AND E.FullName = 'john citizen'

错误

Msg4104,级别16,状态1,第45行
多部分标识符"E.全名";无法绑定。

我已经在谷歌上搜索了这个问题&据我所知,联接的表不与CTE交互,这就是它在以下条件下失败的原因。

AND E.FullName = 'john citizen'     

如何更改脚本以便查询表?

表别名E仅在内部中定义,而不在外部查询中定义。在该范围中,只有一个(派生的(表,称为cte,它具有CTE返回的所有列名。

换句话说,你可以做:

with cte as (...)
select * 
from cte
where run = 1 and fullname = 'john citizen'

如果你真的想使用别名,那么给CTE取别名,然后:

with cte as (...)
select c.* 
from cte c
where c.run = 1 and c.fullname = 'john citizen'

最新更新