SQL:使用其他字段的值查询列名

时间:2016-09-05 13:48:25

标签: sql sql-server

我在同一张表中有以下3个字段:

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

我希望根据cell字段的值达到homeprimary的值。

我尝试了以下操作,这显然不起作用......但无法弄清楚如何将primary的值转换为列名:

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

由于

4 个答案:

答案 0 :(得分:3)

您可以使用CASE

SELECT
CASE primary WHEN 'cell' THEN cell ELSE home END AS ContactNo,
primary
FROM TableName

答案 1 :(得分:1)

Sandip提出的案例陈述是正确的方法。 我想指出你可以使用计算列将它直接放入表中: ALTER TABLE tblstudents将首选添加为(CASE [primary] WHEN' cell' THEN cell ELSE home END); 这样做的好处是,使用该表的任何查询始终对首选数字使用相同的逻辑。此外,如果其中一个字段值发生更改,则首选项会同时自动更改。 请注意,primary是SQL保留字(想想"主键"),因此对于列名称来说这是一个非常糟糕的选择。通常,尽量避免使用SQL关键字作为标识符。

答案 2 :(得分:0)

select primary ,
case 
    when primary = 'cell' then cell
    when primary = 'home' then home
END as phone
from tblstudents 
WHERE studentid = 39358

答案 3 :(得分:0)

以防您不喜欢CASE选择器:

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