Столбец SQL Server, разделенный запятыми, в несколько столбцов

В настоящее время у меня есть таблица из трех столбцов; Org, Group ID и Role.

введите здесь описание изображения

Столбец с именем Org можно игнорировать.

То, что я пытался сделать, это сгруппировать их на основе Group ID и разделить каждое из Roles, принадлежащих одному и тому же Group ID, в один столбец.

До сих пор мне удавалось сгруппировать записи и поместить Roles одной и той же группы в один и тот же столбец.

введите здесь описание изображения

Я использовал следующий скрипт:

Select 
    [Group ID],  
    Substring((Select ',' +  [Role] 
               From [dbo].[ASA_test] B 
               Where B.[Group ID] = A.[Group ID]] 
               For XML Path('')), 2, 8000) As List  
From 
    [dbo].[ASA_test]  A
Group By 
    [Group ID] 

Позже я создал переменную временной таблицы и вставил в нее приведенный выше SQL, чтобы впоследствии использовать эту переменную в определяемой пользователем функции, чтобы получить результат.

Пожалуйста, смотрите ниже:

DECLARE @MyTempTableVariable TABLE
(
    GroupID int,
    Role nvarchar(255)
)

INSERT INTO @MyTempTableVariable
   Select 
       [Group ID],  
       Substring((Select ',' +  [Role] 
                  From [dbo].[ASA_test] B 
                  Where B.[Group ID] = A.[Group ID]] 
                  For XML Path('')), 2, 8000) As List  
   From 
       [dbo].[ASA_test]  A
   Group By 
       [Group ID] 

Однако я не мог пойти дальше, так как это не сработало, как я ожидал.

Может кто-нибудь помочь? обратите внимание, что общее количество записей не ограничивается тем, что я публикую здесь.

Спасибо!


person user3087150    schedule 19.03.2015    source источник


Ответы (2)


Я думаю, вы должны указать имя столбца в запросе на вставку после имени таблицы. Смотри ниже:

INSERT INTO @MyTempTableVariable(GroupID , Role)....

Остальная часть запроса должна работать нормально.

person Nikhil Gaur    schedule 19.03.2015
comment
если это работает для вас, пожалуйста, отметьте как ответ, чтобы другие также могли извлечь пользу из этого вопроса. Спасибо - person Nikhil Gaur; 20.03.2015

сделай это.

SELECT  GroupID 
   ,STUFF((SELECT ', ' + CAST([Role] AS VARCHAR(10)) [text()]
     FROM [dbo].[ASA_test] 
     WHERE GroupID  = t.GroupID 
     FOR XML PATH(''), TYPE)
    .value('.','NVARCHAR(MAX)'),1,2,' ') List_Output
FROM [dbo].[ASA_test]  t
GROUP BY GroupID
person Prashant    schedule 19.03.2015