为什么我无法从外部查询中的子查询访问定义为“选择1”的字段?
问题描述:
我有这样的子查询:为什么我无法从外部查询中的子查询访问定义为“选择1”的字段?
LEFT JOIN (SELECT 1 as exist
, MAX (ev.EventDate) as eventdate
, evt.EventCode
, CCaseID
FROM stg.Event ev
JOIN stg.EventTemplate evt
ON ev.EventTemplateID = evt.ID
WHERE evt.EventCode = 'UN002'
Group by CCaseID, evt.EventCode) as un002
ON un002.CCaseID = ev.CCaseID
WHERE evt.EventCode = 'UN001'
AND (un002.eventdate < ev.eventdate OR un002.eventdate IS NULL)
Group by ev.CCaseID, evt.EventCode) as un001
ON cc.ID = un001.CCaseID
我现在试图访问存在场在外部查询按un001.exist
但SQL Server告诉我,这是一个无效的领域。我错过了什么?
答
un001
没有exist
该字段属于un002
子查询。
另外你还有一个GROUP BY
和和ON
所以这里有一些缺少的代码。
您应该简化代码并使用CTE使其易于阅读和调试。
像这样:
WITH un001 as (SELECT ...),
un002 as (SELECT ...)
SELECT *
FROM un001
JOIN un002
ON un001 .CCaseID = un002.CCaseID
+1
他们在发布的代码中没有复数形式。 –
+0
@SeanLange你是对的我完全错过了这个问题。 –
如果列被称为1,只要尝试用方括号所示的数目[1]包围。 – russ
你问你为什么不能访问主查询中名为“exist”的列吗? –
那么.... un001.exist不是一个有效的列。您将该子查询命名为un002。这会让你更容易看到是否有更好的格式。 –