我的桌子:
用户(用户 ID、col1、col2)
我想创建一个通用存储过程,但我需要在查询中返回 col1 或 col2。
我可以用case语句处理这种情况吗?
从用户中选择用户 ID、col1
或者
从用户中选择用户 ID、col2
我的桌子:
用户(用户 ID、col1、col2)
我想创建一个通用存储过程,但我需要在查询中返回 col1 或 col2。
我可以用case语句处理这种情况吗?
从用户中选择用户 ID、col1
或者
从用户中选择用户 ID、col2
使用案例:
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 或 CONVERT 将一个转换为另一个。