2010-07-02 18 views
3

我在使用CASE語句執行查詢時遇到問題。 根據我的情況(例如長度),我想執行不同的SQL語句。如何根據CASE執行不同的SELECT語句

有問題的示例查詢如下:

select case 
    when char_length('19480821') = 8 
     then select count(1) from Patient 
    when char_length('19480821')=10 
     then select count(1) from Doctor 
end 

例外:

[錯誤]腳本線:1-5 --------------- -----------
關鍵字'select'附近的語法不正確。
消息:156,等級:15,狀態:2
服務器:sunsrv4z7,行:2

我不能夠正確的語法。我得到char_length的字符串作爲來自用戶的輸入。 如何根據特定條件激發查詢? CASE是正確的選擇嗎?或者我必須使用任何其他的東西。

回答

1
select 
    case when char_length('19480821')=8 then (select count(1) from Patient) 
     when char_length('19480821')=10 then (select count(1) from Doctor) 
    end 

的問題是,你缺少開在你的嵌套「選擇」語句右括號:)

+1

你可能要移動的左括號第二則條款中一個字是正確的。 – potatopeelings 2010-07-02 06:37:52

+1

仍然有語法錯誤,因爲在第三行然後是括號內 – 2010-07-02 06:38:16

+0

謝謝,修正:0 – VoodooChild 2010-07-02 06:40:21

4

只要把開閉左右支架select語句解決你的問題

select 
    case when 
     char_length('19480821')=8 then 
      (select count(1) from Patient) 
     when 
     char_length('19480821')=10 then 
      (select count(1) from Doctor) 
     end 
+0

+1哈哈,打敗你吧! – VoodooChild 2010-07-02 06:38:11

+0

是啊.................. – 2010-07-02 06:39:19

2

請注意,這不是一個case STATEMENT,它是一個表達式。通過將查詢括在括號中,您可以將它們(語法)轉換爲值。

這在原則上是一個子查詢類似,如 「從醫生選擇名稱,其中工資=(選擇最大(從醫生的工資))」