2017-10-05 83 views
0

假設有一些電話號碼連接到人,並且這些電話號碼有索引。條件滿足後結束CASE聲明

  1. 我需要先選擇一個索引爲16389的數字。
  2. 如果以前不存在,或者是空的,我需要選擇一個索引16385的數字。
  3. 如果以前也不存在,我需要選擇一個號碼連接到一個人的公司(這裏索引不重要)。

限制是,只應顯示其中一個數字 - 因此,如果有16389索引的數字,只有它應顯示,即使有16385索引或公司編號的數字。 CASE語句不起作用(或者我可能無法將其構造成按需要工作)。

這裏是什麼,我在想(不工作)的例子:

(CASE 
    WHEN pho.ptype_idx = 16389 THEN pho.phone END 
    ELSE WHEN pho.ptype_idx = 16385 THEN pho.phone END 
    ELSE pho1.phone (this is the company phone number) 
END) as 'column1' 

的問題是,我怎麼能強迫CASE結束後的情況是真的嗎?因爲現在它會返回重複的行,只有更改了電話號碼。或者,也許另一種方法會更好?我正在使用SQL Server 2016.

+0

你能否詳細說明不工作?你有錯誤嗎?錯誤的結果? – Mureinik

+0

只有一個END需要,最後一個。並且在時間之前沒有ELSE。 – jarlh

回答

2

A case表達式不會生成其他行。你的問題的這一部分沒有意義。

您的case在語法上的錯誤並不正確。正確的公式是:

(CASE WHEN pho.ptype_idx = 16389 THEN pho.phone 
     WHEN pho.ptype_idx = 16385 THEN pho.phone 
     ELSE pho1.phone (this is the company phone number) 
END) as column1 

至少,這在語法上是正確的,所以它至少應該起作用。它也可能解決你的問題。

這可以更簡單地寫爲:

(CASE WHEN pho.ptype_idx IN (16389, 16385) THEN pho.phone 
     ELSE pho1.phone (this is the company phone number) 
END) as column1 
+0

當然,它的工作原理,我做到了這一點,但問題是,如果有索引16389,16385和公司的電話號碼的電話號碼,並且我需要按照我在問題中指定的順序停下來。遇到一個條件後,是否有辦法結束CASE,而不檢查其餘部分? – Pocia

+1

@Pocia。 。 。我建議你問*另一個問題。提供樣本數據和期望的結果。如果您包含SQL,請嘗試確保它在語法上是正確的。這個問題不清楚,語法錯誤的SQL是一個很大的分心。如果你現在編輯它,它不僅會使這個答案失效(吸引downvotes),但它可能不會得到其他答案。 –