TSQL изменить строки в объединенный столбец - PullRequest
0 голосов
/ 15 октября 2019

У меня есть таблица, из которой я пытаюсь объединить строки в один столбец.

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

Столбец, который мне нужно объединить, - это SignificantFindings, основанный на ActionRef. Я приложил изображение образца данных.

SELECT        ID, ResultId, SyncDate, JobNo, ActionRef, ActionStatus, DateFirRiskIdentified, AssessNo, ActionDueDate, DescFirRiskRequired, SignificantFindings, PriorityRisk, FirRiskInternalExternal, AreaLocRisk, 
                         FloorFirRisk, AddLocRiskInfo, FurtherControlReq, Officer
FROM            CYHSQL01.TM_FireRiskAssessment.dbo.ActionRequired

enter image description here

Заранее благодарю за любую помощь.

1 Ответ

1 голос
/ 15 октября 2019

Для вашего следующего вопроса: Пожалуйста, не размещайте фотографии.

Лучшим был MCVE. В этом случае я делаю это для вас. Пожалуйста, попробуйте настроить такой тестовый сценарий самостоятельно для следующего случая. Цель состоит в том, чтобы иметь автономный образец для воспроизведения вашей проблемы с вашими собственными попытками и ожидаемым результатом:

DECLARE @mockupTable TABLE(ActionRef VARCHAR(100),SignificantFindings VARCHAR(1000));
INSERT INTO @mockupTable VALUES('AR1','Finding ar1.1')
                              ,('AR1','Finding ar1.2')
                              ,('AR2','Finding ar2.1');

SELECT ar.ActionRef
      ,STUFF(
       (
        SELECT CONCAT(', ', ar2.SignificantFindings)
        FROM @mockupTable ar2
        WHERE ar2.ActionRef=ar.ActionRef
        FOR XML PATH(''),TYPE).value('.','nvarchar(max)'),1,2,'') AS ConcatenatedFindings
FROM @mockupTable ar
GROUP BY ar.ActionRef;

Начиная с v2017 + есть STRING_AGG()

SELECT ar.ActionRef
      ,STRING_AGG(ar.SignificantFindings,';') AS ConcatenatedFindings
FROM @mockupTable ar
GROUP BY ar.ActionRef;

С вашим собственным именем таблицы это будет близко к чему-то следующему:

SELECT ar.ActionRef
      ,STUFF(
       (
        SELECT CONCAT(', ', ar2.SignificantFindings)
        FROM CYHSQL01.TM_FireRiskAssessment.dbo.ActionRequired ar2
        WHERE ar2.ActionRef=ar.ActionRef
        FOR XML PATH(''),TYPE).value('.','nvarchar(max)'),1,2,'') AS ConcatenatedFindings
FROM CYHSQL01.TM_FireRiskAssessment.dbo.ActionRequired ar
GROUP BY ar.ActionRef;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...