2016-09-05 22 views
1

的價值查詢列名,我有以下3個字段在同一個表:SQL:使用其他場

cell | home | primary 
---------------------------------------------- 
111  2222   cell 
456565  4654564  home 

我想達到任cellhome基礎上,primary價值的價值領域。

我嘗試以下,這顯然是行不通的......但無法弄清楚如何的primary值轉換爲可以理解爲列名:

SELECT 
    (SELECT primary FROM tblstudents WHERE studentid = 39358) 
FROM 
    tblstudents WHERE studentid = 39358 

感謝

+0

使用反引號。 '\'主\'' – sed

+0

或者使用一個旋轉的發言以及在數據透視聲明限制了行保證值。我沒有接觸過電腦,現在向您展示一些方法 –

回答

3

您可以使用CASE

SELECT 
CASE primary WHEN 'cell' THEN cell ELSE home END AS ContactNo, 
primary 
FROM TableName 
0
select primary , 
case 
    when primary = 'cell' then cell 
    when primary = 'home' then home 
END as phone 
from tblstudents 
WHERE studentid = 39358 
1

的Sandip提出的聲明是正確的方法。

我想指出的是您可以使用計算列把這個直接到表:

ALTER TABLE tblstudents add preferred as (CASE [primary] WHEN 'cell' THEN cell ELSE home END); 

這樣做,使用表中的任何查詢總是使用相同的邏輯爲首選號碼的優勢。此外,如果字段值中的一個變化,那麼preferred自動同時變化。

注意primary是一個SQL保留字(認爲「主鍵」),所以它是一個列名非常不錯的選擇。通常,儘量避免使用SQL關鍵字作爲標識符。

+0

謝謝 - 有趣的想法! – kneidels

0

萬一你不喜歡CASE選擇:

SELECT cell phone FROM students WHERE PRIMARY='cell' 
UNION 
SELECT home phone FROM students WHERE PRIMARY='home'