在sql server中,需要选择两列中的一列,case语句可以这样做吗?

时间:2009-11-07 02:01:12

标签: sql-server sql-server-2008 case

我的表:

用户(userID,col1,col2)

我想创建一个通用存储过程,但我需要在查询中返回EITHER col1或col2。

我可以在case语句处理这种情况吗?

SELECT userID,col1 来自用户

OR

SELECT userID,col2 来自用户

4 个答案:

答案 0 :(得分:3)

使用CASE:

SELECT t.userid,
       CASE
         WHEN [something to evaluate why to show col1 vs col2 ] THEN
           t.col1
         ELSE
           t.col2
       END
  FROM USERS t

使用COALESCE:

SELECT t.userid,
       COALESCE(t.col1, t.col2)
  FROM USERS t

COALESCE从左侧开始返回非空的第一列值。

答案 1 :(得分:2)

是的,只要你不介意返回相同的列名:

SELECT userID, ArbitraryCol = CASE WHEN @param = 1 then col1 ELSE col2 END
FROM Users

如果需要更改列标题,则应使用IF语句

IF @param = 1
BEGIN
SELECT userID, col1 FROM Users
END
ELSE
BEGIN
SELECT userID, col2 FROM Users
END

答案 2 :(得分:1)

我认为SQL Server 2000/2005是这样的。

select
   UserID,
   case UserID
      when 1 then Col1
      when 2 then Col2
      else 'boo'
   end as SpecialSituation
from
   Users

答案 3 :(得分:-1)

它可以,假设您有何时返回col1而不是col2的逻辑表达式:

SELECT USERID CASE WHEN USERTYPE='X' THEN COL1 ELSE COL2 END FROM USERS

如果col1和col2属于不同类型,则需要使用CAST或CONVERT将一个转换为另一个。