2012-09-13 75 views
2

我不知道如何在sql中寫入查詢。
這是我到目前爲止所嘗試過的。我可以在WHERE子句中使用CASE表達式嗎?

where 
    case 
     when a.book_id like 'AB%' then a.book_id = b.school_id, --1 
     when a.book_id like 'CB%' then a.book_id = b.college_id. --2 
    end 


殼體1和2解釋。

1-我相信很好。
2-時a.book與字母CB開始e.g CBQ123然後只取Q123 = b.college_id

b.college_id在它前面沒有CB。

編輯添加例如

select 
     a.Name, 
     a.ID, 
     a.Due, 
     b.school_id, 
     b.college_id 
from Student a and FinishedStudent b 
where 
    case 
     when a.book_id like 'AB%' then a.book_id = b.school_id, --1 
     when a.book_id like 'CB%' then a.book_id = b.college_id. --2 
    end 

如果a.book = CBQ111然後Q111是FinishedStudent表不CBQ11,所以我只是需要比較最後3個字符。

編輯與案例2例

when a.book_id ='CBQ111' then a.book_id(Q111) = b.college_id. --2 
+1

請提供採樣數據和一個例子的結果集像[這個問題](http://stackoverflow.com/questions/12358842/how-to-get-distinct-rows-with-max-value/ )。您可以在標題中指定SQL Server,但在標記中指定MySQL和Oracle。你能澄清你正在使用哪種產品? –

+0

爲什麼不能在查詢的select部分做同樣的事情? –

+0

book_id爲何等於school_id或college_id?我在這裏看到嚴重的數據模型問題。此外,爲什麼它標記了SQL Server和Oracle?這兩個平臺的語法可能會有所不同。 –

回答

6

只是一個小的語法問題。在T-SQL中,CASE是一個返回值的表達式,因此您需要將輸出與某些內容進行比較 - 它不像VB等其他語言中的流控制語句那樣。

where a.book_id = case 
     when a.book_id like 'AB%' then b.school_id --1 
     when a.book_id like 'CB%' then b.college_id --2 
    end 

基於在評論中添加題擾,也許你實際上是經過是這樣的:

WHERE (a.book_id LIKE 'AB%' AND a.book_id = b.school_id) 
    OR (a.book_id LIKE 'CB%' AND SUBSTRING(a.book_id, 3, 255) = b.college_id) 

還有其他的方法來編寫最後一行,但如果book_id有索引LIKE過濾器可能仍然有幫助。

+0

我寫了同樣的答案,然後我問自己:這裏不是'ELSE'嗎?如果'a.book_id'不符合任何這些條件? – bfavaretto

+0

@bfavaretto然後行不返回。我們只能處理我們提供的信息。 –

+0

所以你的意思是'CASE'會返回'NULL'或類似的東西在這種情況下?這是有道理的。 – bfavaretto

0

編輯:糾正的問題和清理代碼。

你可以把它在WHERE子句中,但我更願意把它的加入。

select 
     a.Name, 
     a.ID, 
     a.Due, 
     b.school_id, 
     b.college_id 
from Student a 
    join FinishedStudent b on a.book_id = 
    case 
     when a.book_id like 'AB%' then b.school_id, --1 
     when a.book_id like 'CB%' then b.college_id. --2 
    end 
+0

這對我來說似乎並不正確;它看起來像一個布爾表達式。你需要將輸出與某些東西進行比較。 –

+0

謝謝,是一個錯字。我仔細研究了一下,並做了一些修改。 – wtjones

相關問題