我的表:

用户(用户ID,COL1,COL2)

我想打一个通用的存储过程,但我需要返回或者在查询COL1 COL2或

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

选择用户ID,COL1 来自用户的

OR

选择用户ID,COL2 来自用户的

有帮助吗?

解决方案

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

其他提示

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

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

我想的SQL Server 2000/2005是这样的。

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

它可以,假设你有何时返回COL1的逻辑表达式而不是COL2:

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top