Как разделить запятую на неизвестное количество столбцов - PullRequest
0 голосов
/ 23 мая 2019

Вместо 25+ внутренних объединений и отдельных операторов выбора, есть ли более динамичный способ, которым я могу взять все элементы в столбце ACTION_NAME, связанные с 1 записью, и отобразить их в виде нескольких столбцов в одной строке? Каждый со своим именем столбца (но это может быть случайное имя).

Мне буквально приходится работать со столбцом таблицы, который может содержать 25 или даже больше элементов. Я никогда не могу точно знать, сколько именно. Я хотел бы сделать код самодостаточным для будущих изменений. В конечном счете, они нужны мне в своих собственных столбцах, чтобы я мог отобразить их в письме слияния в нужном мне формате. Спасибо!

Я использую CROSS APPLY, и когда я пытаюсь создать то, что мне нужно, в операторе SELECT, я могу получить только показ всех элементов «ACTION_NAME», связанных с одной записью, перечисленной вместе в одном столбце, разделенном знаком ' ;». Мне нужно получить от этого разделение каждого элемента в точке с запятой на отдельный столбец.

SELECT DISTINCT 
a.[PersonID],
a.[ACTION_ID],
a.[ACTION_NAME],
d.name
FROM dbo.[ACTIONSCHEDULE] a
CROSS APPLY  (SELECT substring(a2.[ACTION_NAME],1,100) +';'
         FROM [ACTIONSCHEDULE] a2
         WHERE a2.PEOPLE_ORG_CODE_ID=a.PEOPLE_ORG_CODE_ID
         FOR XML PATH('')) D (name)
WHERE ( a.[ACADEMIC_YEAR] > '2018'   )

Так, например, у ID # 1 есть 2 элемента в. [ACTION_NAME]. Это проявляется традиционным способом с двумя отдельными строками в одном столбце. Я попытался заставить d.name работать так, чтобы он представлял собой одну строку, несколько столбцов для идентификатора записи # 1.

ID      ACTION_NAME       name
--------------------------------------------
1       ADM Folder        PARTNE20;ADM Folder;
1       PARTNE20          PARTNE20;ADM Folder;

Как я хочу, чтобы это выглядело:

ID      name1             name2
--------------------------------------------
1       ADM Folder        PARTNE20

Но опять же, это не 2 или 4 столбца, с некоторыми записями связано более 25 элементов. Хорошо, спасибо!

...