2017-10-20 351 views
-2

我有這樣的子查詢:爲什麼我無法從外部查詢中的子查詢訪問定義爲「選擇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。這會讓你更容易看到是否有更好的格式。 –

回答

1

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你是對的我完全錯過了這個問題。 –

相關問題