2010-09-01 111 views
0

我將問題簡化爲以下select語句。在選擇語句創建的列上無效的列名稱

select 
    u.UserId, 
    aVariable = cast((case when exists(select * from TblUser u where u.Disabled=1) then 1 else 0 end) as bit), 
from TblUser u 
where aVariable = 1 

aVariable不是表的列,而只是一個在此select語句中獲取值的列。

有沒有辦法做到上述沒有得到 無效的列名稱aVariable錯誤?

+0

的例子並沒有多大意義,即使它是正確的語法,這是實際上是相同的話說,「其中1 = 1」。你能舉一個更具體的例子嗎? – TML 2010-09-01 10:21:59

+0

您需要更新聲明 - 請參閱我的答案。 – Hogan 2010-09-01 10:30:35

+0

我不明白你選擇的答案作爲正確的作品 - 看到我編輯的答案。 – Hogan 2010-09-01 23:18:01

回答

3
select q.* from (
select 
    u.UserId, 
    cast((case when exists(select * from TblUser u where u.Disabled=1) then 1 else 0 end) as bit) as aVar, 
from TblUser u 
)q 
where q.aVar = 1 
+0

抱歉誤會,我更新了這個問題。 – Stavros 2010-09-01 10:26:21

+0

更新了答案。 – 2010-09-01 10:28:41

+0

關鍵字'where'附近的語法錯誤。 – Stavros 2010-09-01 10:32:40

1

SELECT必須像這樣:

select 
    u.UserId, 
    1 as aVariable 
from TblUser u 
+0

抱歉誤會,我更新了這個問題。 – Stavros 2010-09-01 10:25:26

+0

你的問題仍然不清楚。你想實現什麼? – 2010-09-01 12:21:39

1

您選擇是正確的說法是沒有意義的。

select q.* from (
select 
    u.UserId, 
    cast((case when exists(select * from TblUser u where u.Disabled=1) then 1 else 0 end) as bit) as aVar, 
from TblUser u 
)q 
where q.aVar = 1 

上面的聲明表示如果有一個用戶被禁用,則選擇來自tbluser的所有用戶。

我想你想看到表中的用戶被禁用。如果是這樣,那麼你想要以下選擇語句:

SELECT userid, disabled as aVar 
FROM TblUser 
WHERE disabled = 1 

給這個鏡頭。

先前回答刪除,因爲問題有點不清楚。

+0

抱歉誤會,我更新了這個問題。 – Stavros 2010-09-01 10:26:52

+0

aVariable不是一個參數,它是一個列名,我想在where子句中使用它。 – Stavros 2010-09-01 10:27:33

+0

您無法更改select語句中的列值 - 只能讀取值...如果您希望新的輸出列使用'as'如果要更改表使用更新。 – Hogan 2010-09-01 10:36:15

1

你需要這樣做:

select 
    u.UserId, 
    aVariable = cast((case when exists(select * from TblUser u where u.Disabled=1) then 1 else 0 end) as bit), 
from TblUser u 
where cast((case when exists(select * from TblUser u where u.Disabled=1) then 1 else 0 end) as bit) = 1 
+0

我在尋找更好的東西,因爲case語句塊中的select語句更加複雜和緩慢:( – Stavros 2010-09-01 10:33:57

+0

也許你可以將case語句包裝到一個函數中 - 這可能會加快速度,它肯定會使它更具可讀性。你能夠真正發佈真正的問題嗎?有人可能能夠一起提供不同的解決方案。 – codingbadger 2010-09-01 10:38:35

+0

不使用函數!!!使用連接。 – Hogan 2010-09-01 11:01:33