在SQL Server中,需要选择两列之一,可以在case语句做到这一点?
-
18-09-2019 - |
题
我的表:
用户(用户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或转换为一个转换到另一个。
不隶属于 StackOverflow