Sql 使用coalesce-inside-case-then子查询获得逗号分隔的值
我想知道是否有人能帮我解决一个我已经陷入困境一段时间的问题。我有一个数据库,需要根据变量值从中获取一些数据,所以我尝试使用case语句来实现,但由于子查询返回了多行,所以我被卡住了。有人能帮我解决这个问题吗 这是我当前的查询:Sql 使用coalesce-inside-case-then子查询获得逗号分隔的值,sql,sql-server-2012,Sql,Sql Server 2012,我想知道是否有人能帮我解决一个我已经陷入困境一段时间的问题。我有一个数据库,需要根据变量值从中获取一些数据,所以我尝试使用case语句来实现,但由于子查询返回了多行,所以我被卡住了。有人能帮我解决这个问题吗 这是我当前的查询: Select CASE @WorkTypeId WHEN 1 THEN (SELECT COALESCE(@GroupId+',' ,'') + CAST(GroupId as VARCHAR(2)) FROM UserGroupRoleMappin
Select
CASE @WorkTypeId
WHEN 1 THEN (SELECT COALESCE(@GroupId+',' ,'') + CAST(GroupId as VARCHAR(2)) FROM UserGroupRoleMapping
WHERE UserId= @UserId and IsActive=1 AND GroupId != 4)
WHEN 3 THEN (SELECT COALESCE(@GroupId+',' ,'') + CAST(GroupId as VARCHAR(2)) FROM UserGroupRoleMapping
WHERE UserId= @UserId and IsActive=1 AND GroupId = 4)
ELSE (SELECT COALESCE(@GroupId+',' ,'') + CAST(GroupId as VARCHAR(2)) FROM UserGroupRoleMapping
WHERE UserId= @UserId and IsActive=1)
该查询用于获取链接用户的所有组。
与let类似,如果工作类型为1,并且用户id为567的用户与组id为1、3、5、4、6的某些组链接(对于每个不同的组,数据库中都有一个新条目),则我需要获取除“4”之外的所有组id,这些组id与该用户链接,以逗号分隔
通过使用if-else,我可以通过以下查询实现它
IF @WorkTypeId =1
BEGIN
SELECT @GroupId = COALESCE(@GroupId+',' ,'') + CAST(GroupId as VARCHAR(2))
FROM UserGroupRoleMapping
WHERE UserId= @UserId and IsActive=1 AND GroupId != 4
END
在这里,我可以在@GroupId变量中获取组ID
样本数据:
UserId GroupId WorkTypeId IsActive
567 1 1 1
567 2 1 1
567 3 1 1
567 4 1 1
567 5 2 1
567 2 2 1
567 4 3 1
567 1 3 1
我应该得到的输出(用户id:567)应该是:
当worktypeId=1时
groupId:(1,2,3)
当worktypeId=2时
groupId:(1,2,3,4,5)
当workTypeId=3时
groupId:(4)
IsActive应该被忽略。只有在需要返回列表中的第一个非空值时,才可以使用COALESCE()。例如:
SELECT COALESCE(NULL, NULL, NULL, 'A', NULL, 'B');
返回“A”您可以按照下面的方式编写case语句,并且可以避免子查询
SELECT case when @WorkTypeId = 1 and GroupId != 4 then
COALESCE(@GroupId+',' ,'') + CAST(GroupId as VARCHAR(2))
case when @WorkTypeId = 3 and GroupId = 4 then
COALESCE(@GroupId+',' ,'') + CAST(GroupId as VARCHAR(2))
else COALESCE(@GroupId+',' ,'') + CAST(GroupId as VARCHAR(2))
as GroupId
FROM UserGroupRoleMapping
WHERE UserId= @UserId
and IsActive=1
你能解释一下你想做什么吗?共享一些示例数据和预期结果将有助于使问题更加清晰。根据worktypeId,我需要使用if-else语句从dbby中获取一些组ID我能够实现,但我想按case语句执行相同的操作您的最后一个else语句与第一个case语句相同..我的子查询返回的值超过1行,因此我想在@groupId中选择该值,我可以使用coalesce在正常查询中执行该操作