我的表:
用户(userID,col1,col2)
我想创建一个通用存储过程,但我需要在查询中返回EITHER col1或col2。
我可以在case语句处理这种情况吗?
SELECT userID,col1 来自用户
OR
SELECT userID,col2 来自用户
答案 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将一个转换为另一个。