2017-01-18 38 views
2

我試圖在OR子句中使用列別名,但我不斷收到錯誤:「無效的列名'TEAM NAME'」。我見過有關在WHERE子句中使用別名的線程,但我不確定OR是否可行。 這裏就是我的工作:在OR子句中使用別名SQL

[TEAM NAME] = CASE WHEN MAX(L.City) IN ('RY','BR') THEN 'Team 1' 
WHEN MAX(L.City) IN ('JS','ND') THEN 'Team 2' 
WHEN MAX(L.City) IN ('QV','VE') THEN 'Team 3' 
WHEN MAX(L.City) IN ('FB','RX') THEN 'Team 4' 
ELSE '-' END, 

,這裏是我的OR子句

AND (U.Player IN ('Tom Thumb','Wallace Gromit') OR [Team Name] <> '-') 
+1

我認爲你最好的選擇是將你的主要當前查詢包裝在一個子查詢中,並將這個部分放在外面,如果你想使用別名。或者,在沒有使用別名的情況下,在一個having子句中排隊。例如('''''''','','','','','')或max(L.city)中的u.player('Tom Thumb','Wallace Gromit' 'fb','rx')' – ZLK

回答

1

不幸的是,你必須把它寫出來。 PS這應該是HAVING子句中:

AND (U.Player IN ('Tom Thumb','Wallace Gromit') OR 
CASE WHEN MAX(L.City) IN ('RY','BR') THEN 'Team 1' 
WHEN MAX(L.City) IN ('JS','ND') THEN 'Team 2' 
WHEN MAX(L.City) IN ('QV','VE') THEN 'Team 3' 
WHEN MAX(L.City) IN ('FB','RX') THEN 'Team 4' 
ELSE '-' END, 
<> '-') 

OR

AND (U.Player IN ('Tom Thumb','Wallace Gromit') OR 
MAX(L.City) NOT IN ('RY','BR','JS','ND','QV','VE','FB','RX')) 

或者你可以把你的整個查詢作爲子查詢,並從該

Select * from (myquery) s where (U.Player IN ('Tom Thumb','Wallace Gromit') OR [Team Name] <> '-') 

Similar issue here

選擇Check out a basic example here

+3

注意:集合進入'HAVING'子句。 – ZLK

+2

我指的是你的答案的前兩部分。他們需要有條款,否則他們仍然會產生錯誤。 – ZLK

+0

@zlk聰明,100%正確。已更新 – EoinS

0

您是否嘗試過在SELECT聲明中以這種方式使用別名?

CASE WHEN MAX(L.City) IN ('RY','BR') THEN 'Team 1' 
    WHEN MAX(L.City) IN ('JS','ND') THEN 'Team 2' 
    WHEN MAX(L.City) IN ('QV','VE') THEN 'Team 3' 
    WHEN MAX(L.City) IN ('FB','RX') THEN 'Team 4' 
    ELSE '-' END AS [TEAM NAME] 

如果這是一個子查詢或CTE的一部分,它將提供可以訪問此列中從它的外部查詢請求的數據。

此外,WHERE子句中的任何查詢/子查詢SELECT條款之前運行,所以WHERE子句中的別名將不可用,如果它是在SELECT子句在同一查詢/子查詢製成。