0

我的桌子:

用户(用户 ID、col1、col2)

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

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

从用户中选择用户 ID、col1

或者

从用户中选择用户 ID、col2

4

4 回答 4

3

使用案例:

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 返回第一个不为空的列值,从左侧开始。

于 2009-11-07T02:05:36.360 回答
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
于 2009-11-07T02:05:46.947 回答
1

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

select
   UserID,
   case UserID
      when 1 then Col1
      when 2 then Col2
      else 'boo'
   end as SpecialSituation
from
   Users
于 2009-11-07T02:06:38.410 回答
-1

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

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

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

于 2009-11-07T02:06:25.000 回答