0

嗨我正在做一個子查詢來獲取cTL列的值但是我需要子查詢中的外列值爲正確的響應 但我得到錯誤,它不能識別SC和RC變長。任何出路?在子查詢中使用OuterQuery列

SELECT DISTINCT(cStoreCode) as SC 
    ,cRetailerCode as RC 
    , cStoreCode + ' - ' + cStoreName AS Store, 
    x.TeamLead 
FROM 
(
    SELECT cTL as TeamLead 
    FROM tblEmpSchedule 
    WHERE cRepCode LIKE @repCode AND 
     cClientCode LIKE @gCode AND 
     cProjectCode LIKE @pCode AND 
     cYear LIKE @year AND 
     cCycleNo LIKE @cycleNo AND 
     cRetailerCode LIKE @retailerCode AND 
     cStoreCode = SC AND 
     cRetailerCode = RC 
)x 
,tblEmpSchedule 
WHERE cRepCode LIKE @repCode AND 
    cClientCode LIKE @gCode AND 
    cProjectCode LIKE @pCode AND 
    cYear LIKE @year AND 
    cCycleNo LIKE @cycleNo AND 
    cRetailerCode LIKE @retailerCode AND 
    cStoreCode <> '' AND cStoreCode is Not Null 
ORDER BY cStoreCode 
+0

這沒有任何意義。您正在嘗試在您的FROM子句子查詢WHERE子句中使用SC/RC列很久之前,您已在您的SELECT列表中定義它們(發生在FROM和WHERE子句之後的***之後)。我甚至無法弄清楚你在這裏做什麼。 – RBarryYoung 2012-07-13 17:41:15

+0

目前尚不清楚你想達到什麼樣的,你想與你的查詢解決什麼問題,那就是,爲什麼只是tblEmpSchedule一個簡單的查詢未返回所需的結果集。如果你能詳細說明,有人可以提供幫助。 (請參閱我發佈的答案以獲取更多詳細信息。) – spencer7593 2012-07-13 21:04:27

回答

1

不,你不能在WHERE子句中引用這樣的表達式的別名。表達式的別名只有在來自內聯視圖或CTE(在FROM子句中引用)時纔可以在WHERE子句中引用。

DISTINCT關鍵字的使用看起來很奇怪。不需要在括號中的SELECT列表中包裝第一個表達式。你的構造使它幾乎看起來像是一個函數調用。 (不是,DISTINCT關鍵字適用於SELECT列表中的所有表達式)。

它不完全清楚爲什麼你需要一個JOIN操作在這裏。

我討厭回答一個問題一個問題,但是......什麼是你想通過使用內嵌視圖得到從別名爲TeamLead的CTL列中的值來獲得?應該解決什麼問題?爲什麼表需要被引用兩次?

要問同一個問題的另一種方式......

什麼是「錯誤的」通過查詢在tblEmpSchedule表返回的結果集,像這樣的?

SELECT DISTINCT s.cStoreCode    AS sc 
    , s.cRetailerCode     AS rc 
    , s.cStoreCode + ' - ' + cStoreName AS Store 
    , s.cTL        AS TeamLead 
    FROM tblEmpSchedule s 
WHERE s.cRepCode LIKE @repCode AND 
     s.cClientCode LIKE @gCode AND 
     s.cProjectCode LIKE @pCode AND 
     s.cYear LIKE @year AND 
     s.cCycleNo LIKE @cycleNo AND 
     s.cRetailerCode LIKE @retailerCode AND 
     s.cStoreCode <> '' 
ORDER BY s.cStoreCode 

如果你能解釋一下爲什麼該查詢返回的結果集需要從你有什麼不同的話,我(或其他人)也許能夠提供幫助。正如你的問題所述,目前還不清楚你想達到的目標。

注:在查詢的「cStoreCode IS NOT NULL」謂詞是多餘的。如果「cStoreCode <> ''」謂詞返回TRUE,我們已經知道它不能爲NULL。

1

看起來你需要周圍的SC/RC單引號:

cStoreCode = 'SC' AND 
cRetailerCode = 'RC' 

編輯:

請檢查下面,看看它是否會工作:

SELECT cTL as TeamLead 
FROM tblEmpSchedule t1 
INNER JOIN 
(
    SELECT DISTINCT(cStoreCode) SC 
    , cRetailerCode RC 
    , cStoreCode + ' - ' + cStoreName AS Store 
    FROM tblEmpSchedule 
)t2 

    on t1.cTL = t2.cTL 
WHERE t1.cRepCode LIKE @repCode 
    AND t1.cClientCode LIKE @gCode 
    AND t1.cProjectCode LIKE @pCode 
    AND t1.cYear LIKE @year 
    AND t1.cCycleNo LIKE @cycleNo 
    AND t1.cRetailerCode LIKE @retailerCode 
    AND (t1.cStoreCode <> '' AND t1.cStoreCode is Not Null) 
    AND t1.cStoreCode = t2.SC 
    AND t1.cRetailerCode = t2.RC 
ORDER BY t1.cStoreCode 
+0

無原因我正在嘗試引用別名SC和RC – Amrit 2012-07-13 17:36:50

+0

什麼是確切的錯誤消息? – Taryn 2012-07-13 17:37:37

+0

無效的列名稱SC和RC – Amrit 2012-07-13 17:38:11