在下面的查询中@processtable
是一个表变量,当我尝试加入它时,temp是派生表我收到以下错误:
列前缀“t”与查询中使用的表名或别名不匹配。
SELECT t.Order
,CONVERT(NVARCHAR, temp.[DateTime], 101) AS [DateTime]
,t.Status
,t.Domain
,t.Media
,t.Approved
,t.CreatedBy
FROM @ProcessTable t
JOIN (SELECT MAX(Id),Order FROM OrderDetail OD WHERE OD.Order = t.Order) temp
ON temp.Order = t.Order
ORDER BY temp.[DateTime] DESC, Approved ASC
答案 0 :(得分:2)
试试这个:
SELECT t.Order
,CONVERT(NVARCHAR,temp.[DateTime],101) AS [DateTime]
,t.Status
,t.Domain
,t.Media
,t.Approved
,t.CreatedBy
FROM @ProcessTable t
JOIN (SELECT MAX(Id) AS LatestId, Order FROM OrderDetail OD GROUP BY Order) temp
ON temp.Order = t.Order
ORDER BY temp.[DateTime] DESC, Approved ASC
注意,我已删除嵌套SELECT中的OD.Order = t.Order子句并添加到GROUP BY中。该连接旁边的条件(temp.Order = t.Order)进行过滤,因此不需要在嵌套选择中 - 它导致错误。另外,当您使用聚合函数(MAX)时,您需要GROUP BY。
另外,我已经将MAX(Id)的别名作为
返回答案 1 :(得分:0)
你几乎是正确的......如果要将其作为加入条件之一包含在内,那么你不需要派生表中的where子句。
SELECT
t.Order
,CONVERT(NVARCHAR,temp.[DateTime],101) AS [DateTime]
,t.Status
,t.Domain
,t.Media
,t.Approved
,t.CreatedBy
FROM @ProcessTable t
JOIN (SELECT MAX(Id) AS MaxID,Order, Max([DateTime]) AS [DateTime] FROM OrderDetail OD Group By Order) temp
ON temp.Order = t.Order
ORDER BY temp.[DateTime] DESC, Approved ASC
答案 2 :(得分:0)
我认为你不能在子查询中引用t.Order。您应该只依靠连接来处理该子句。
E.g。只需删除OD.Order = t.Order并允许join子句处理它。