为什么我无法从外部查询中的子查询访问定义为“选择1”的字段?

为什么我无法从外部查询中的子查询访问定义为“选择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告诉我,这是一个无效的领域。我错过了什么?

+1

如果列被称为1,只要尝试用方括号所示的数目[1]包围。 – russ

+2

你问你为什么不能访问主查询中名为“exist”的列吗? –

+3

那么.... un001.exist不是一个有效的列。您将该子查询命名为un002。这会让你更容易看到是否有更好的格式。 –

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你是对的我完全错过了这个问题。 –