Процедура SQL для возврата результата в одну строку - PullRequest
2 голосов
/ 26 июля 2011

У меня есть отчет, разработанный в SSRS 2005, и я использую хранимую процедуру для извлечения результатов из базы данных.Результат вывода отчета очень прост, как показано ниже на рисунке.

Если предполагается, что я ищу других участников, например: -

 MemberID
c108
c109
c110
...

, как показано на рисунке ниже.Таким образом, для каждого члена есть разные ПОЛЬЗОВАТЕЛИ, и для каждого пользователя будут разные РОЛИ.enter image description here

Но мне нужно все в одной строке, как показано ниже.

MemberID  UserID    Roles
c108   22492   SystemOperator,ItemResearcher,Non-Decision Role,Security Administrator, Decisioning Administrator,Reporting,Corporate Administrator
c108   22469   SystemOperator,ItemResearcher,Non-Decision Role,Security Administrator,Decisioning Administrator

Чтобы все роли для каждого пользователя могли отображаться в одной строке в SSRS (создание отчетов) с помощью ', отделился.

Какой самый простой способ написать хранимую процедуру для получения результата, подобного этому.

Обратите внимание: - Могут быть некоторые изменения, если мой начальник хочет, чтобы я также получил userIdтолько в 1 строке с разделением ',', тогда я должен иметь возможность легко изменить запрос.Пожалуйста, предложите мне.Большое спасибо, что нашли время, чтобы прочитать и понять мой вопрос.

Ответы [ 2 ]

2 голосов
/ 26 июля 2011

Если бы это был MySQL, вы бы использовали функцию GROUP_CONCAT для создания этого списка через запятую:

SELECT MemberID, UserID, GROUP_CONCAT(Role) AS Roles
FROM myTable
GROUP BY MemberID, UserID

Однако, поскольку это MSSQL, вам нужно подделать GROUP_CONCAT что-то вроде this

1 голос
/ 26 июля 2011

Если вы хотите объединить, тогда вы можете обратиться к статье Джеффа Модена Настройка производительности: функции объединения и некоторые мифы о настройке , в которой рассматриваются различные методы.

Я бы вообщеиспользовать вещи и для XML-пути (обсуждается в статье), который выглядит примерно так:

SELECT t1.ID,        
   STUFF((SELECT ','+t2.datafield 
   FROM dbo.tablename2 t2 
                WHERE t1.ID = t2.ID FOR XML PATH('')),1,1,'')   
FROM dbo.TestData t1  
GROUP BY t1.ID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...