SQL Server:CASE和连接字符串
我想知道如何从多个SQL CASE
表达式输出连接字符串。SQL Server: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)
我得到这个:
因此,而不是两列B和LK,我想介绍一个新的列这将称为访问级别,如果B是活动的或者LK是活动的,则根据每个程序添加B或LK。例如,如果仅B激活,则“访问级别”列的输出将为B,如果两个程序均处于活动状态,则输出为“B,LK”,如果LK仅处于活动状态,则列将具有LK的值。
我可以选择连接多个案例查询的列值吗?
谢谢,Laziale
回答:
你可以做到这一点是:
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
回答:
收件,检查你所描述的组合,并分配相应的值的第三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表达式,以便评估从顶部到底部,并且当其被满足条件解析到第一,因此,如果B和LK是活动的,则所述第一条件将得到满足,第一结果将被返回,而其他两个条件也都是真的并不重要。
以上是 SQL Server:CASE和连接字符串 的全部内容, 来源链接: utcz.com/qa/267245.html