Мне интересно, может ли кто-нибудь помочь мне с проблемой, над которой я застрял некоторое время.У меня есть база данных, из которой мне нужно получить данные в зависимости от значения переменной, поэтому я попытался сделать это с помощью оператора case, но я застрял, так как подзапрос возвращает несколько строк.Может ли кто-нибудь помочь мне решить проблему
Это мой текущий запрос:
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)
запрос предназначен для получения всей группы, с которой связан пользователь.как пусть, если тип работы равен 1 и пользователь с идентификатором пользователя 567 связан с некоторыми группами с идентификатором группы 1,3,5,4,6 (для каждой отдельной группы есть новая запись в базе данных), то мне нужно получитьвсе идентификаторы группы, кроме '4', которые связаны с этой запятой, разделенной пользователем.
BY, используя, если еще я могу добиться этого с помощью следующего запроса
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
Пример данных:
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
вывод, который я должен получить (идентификатор пользователя: 567), должен быть: когда worktypeId = 1 groupId: (1,2,3) когда worktypeId = 2 groupId: (1,2,3,4,5) когда workTypeId = 3 groupId: (4) IsActive следует игнорировать.