Вместо 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 элементов. Хорошо, спасибо!