2014-01-21 151 views
0

我有以下結構的表:有條件的情況下WHEN語句

CustID | Number 1 | Number 2 | Number 3 | Number 4 
    1 | 072454584 |   | 017726593 | 
    2 |   |0125456852|   | 0125785448 

我嘗試這樣做,選擇第一個數字,可查詢,因此,如果使用客戶ID 2只會返回2號,如果有一個只有4號的記錄,它會忽略1,2,3。我在聲明中試過做過一個案例,但我似乎無法理解邏輯。

+1

我認爲你應該更好地規劃你的表的結構 –

+0

@Nadeem_MK我認爲你應該正確地閱讀這個問題。 「查詢選擇可用的第一個數字,所以如果使用客戶ID 2,它將只返回數字2,如果有一個只有數字4的記錄,它將忽略1,2,3」 – GPH

+0

@Gavlaaa - 改變結構是應該始終在SQL問題上考慮的一件事,你應該提到你不能改變它。絕對不要濫用某人試圖幫助 - 這並不會讓別人感覺到幫助 – Mark

回答

1

如果你有這些列中的NULL值,則使用COALESCE

SELECT CUSTID, COALESCE(number1, number2, number3, number4) 
+0

沒有任何空值,但易於工作。感謝你的回答。 – GPH

1

您可以使用COALESCE返回第一個非空值:

SELECT COALESCE([Number 1],[Number 2],[Number 3], [Number 4]) AS FirstNonNullNum 
FROM dbo.Table1 
WHERE CustID = @paramID 

Demo

但是,您的模型似乎是半最佳的。如果你有列Number 1 - Number N你應該更好地規範化它,並使用一個單獨的表格而不是列。這使得所有查詢更簡單,效率更高。如果您計劃添加更多列,它也更易於維護且不易出錯。