Вы можете попробовать это с unioned запросом:
Некоторым макетом (пожалуйста, предоставьте такую фиктивную таблицу со своими образцами данных в следующем вопросе):
DECLARE @mockup TABLE(Row_ID INT,Group_ID INT,Group_Status VARCHAR(100),MemberRole VARCHAR(100),[name] VARCHAR(100));
INSERT INTO @mockup VALUES
(2807,10568,'accept','chairman','Rajah')
,(2808,10568,'accept','member','Vaughan')
,(2812,10568,'accept','secretary','Susan')
,(2899,10568,'accept','member','Onemore');
- Запрос
SELECT p.*
FROM
(
SELECT Group_ID
,Group_Status
,[name]
,MemberRole
FROM @mockup
WHERE MemberRole IN('chairman','secretary')
UNION ALL
SELECT Group_ID
,Group_Status
,[name]
,CONCAT('Member',ROW_NUMBER() OVER(PARTITION BY Group_ID ORDER BY Row_ID))
FROM @mockup
WHERE MemberRole='member'
) t
PIVOT
(
MAX([name]) FOR MemberRole IN(Chairman,Secretary,Member1,Member2,Member3 /*add as many as you need*/)
) p;
Результат
Group_ID Group_Status Chairman Secretary Member1 Member2 Member3
10568 accept Rajah Susan Vaughan Onemore NULL
Короче:
Первая часть запроса Просто выберет два имени исправления.
Вторая часть выберет членов и отсортирует их по их Row_ID.
Затем PIVOT
преобразует это в одну строку, используя столбец MemberRole
для нового столбца.имена.
Вам придется подумать еще о некоторых вещах:
- Что, если не все строки
accepted
? - Что из множества групп?
Если вам нужна помощь, вы можете вернуться с новым вопросом.Удачного кодирования!