我想知道如何从多个SQL CASE
表达式输出连接字符串。
这是我的疑问:
SELECT
u.UserId,
FirstName,
CASE u.access_b
WHEN '5000' THEN 'Active'
ELSE ''
END AS B,
CASE u.access_l
WHEN '2199-12-31' THEN 'Active'
ELSE ''
END AS LK
FROM
Users u
JOIN
userGroupMembership ugm ON u.userId = ugm.userId
JOIN
usergroup ug ON ug.usergroupId = ugm.usergroupId
WHERE
ug.usergroupId = 1220
AND (u.primaryType = 1 or u.primaryType = 2)
我得到了这个:
因此,我想引入一个名为Access Level的新列,而不是两列B和LK,如果B为Active或LK处于活动状态,则根据每个程序添加B或LK。例如,如果B仅处于活动状态,则“访问级别”列的输出将为B,如果两个程序都处于活动状态,则输出将为“B,LK”,如果LK仅处于活动状态,则列将具有LK的vakue。 / p>
我可以选择连接多个案例查询的列值吗?
答案 0 :(得分:1)
你可以这样做:
SELECT T.*,
CASE WHEN B = 'Active' AND LK = 'Active' THEN 'B, LK'
WHEN B = 'Active' THEN 'B'
WHEN LK = 'Active' THEN 'LK'
ELSE ''
END AS [Access Level]
FROM
(
SELECT u.UserId,
FirstName,
case u.access_b
When '5000' then 'Active'
Else ''
End as B,
case u.access_l
when '2199-12-31' then 'Active'
else ''
end as LK
FROM Users u
join userGroupMembership ugm ON u.userId = ugm.userId
join usergroup ug ON ug.usergroupId = ugm.usergroupId
WHERE ug.usergroupId = 1220 and (u.primaryType = 1 or u.primaryType = 2)
) T
答案 1 :(得分:0)
编写第三个CASE表达式,检查您描述的组合并指定适当的值。在伪代码中:
CASE
WHEN {B is active} AND {LK is active} THEN 'B, LK'
WHEN {B is active} THEN 'B'
WHEN {LK is active} THEN 'LK'
ELSE ''
END
CASE表达式按从上到下的顺序计算并解析为满足的第一个WHEN条件,因此如果B和LK都处于活动状态,则将满足第一个条件,将返回第一个结果,并且无关紧要,其他两个条件也都是正确的。