К сожалению, MS Access не имеет функции row_number()
, чтобы легко присвоить значение каждому элементу за name
. Я бы получил результат следующим образом.
Во-первых, с помощью запроса ниже вы возвращаете name
, group
и увеличивается число, которое назначается для каждой группы на человека:
select name,
group,
(select count(*)
from yourtable t1
where yourtable.name = t1.name
and yourtable.group<= t1.group) AS rw
from yourtable;
Этот запрос даст результат, аналогичный:
+-------+-------+----+
| name | group | rw |
+-------+-------+----+
| John | 2A | 1 |
| John | 1B | 2 |
| Barry | 2A | 1 |
| Ron | 1B | 3 |
| Ron | 2A | 2 |
| Ron | 2C | 1 |
+-------+-------+----+
Затем вы можете использовать функцию IIF()
и агрегатную функцию max()
для преобразования значений из строк в столбцы:
SELECT name,
max(iif(rw=1, group, null)) as Group1,
max(iif(rw=2, group, null)) as Group2,
max(iif(rw=3, group, null)) as Group3
FROM
(
select name,
group,
(select count(*)
from yourtable t1
where yourtable.name = t1.name
and yourtable.group<= t1.group) AS rw
from yourtable
) d
group by name
order by name;
Это даст результат:
+-------+--------+--------+--------+
| name | Group1 | Group2 | Group3 |
+-------+--------+--------+--------+
| Barry | 2A | | |
| John | 2A | 1B | |
| Ron | 2C | 2A | 1B |
+-------+--------+--------+--------+
Edit: Данные в таблице не по своей сути заказанному, но если у вас есть столбец, чтобы поместить данные в нужном порядке, используя идентификатор и т.д., то вы должны быть в состоянии изменить запрос к следующему:
SELECT name,
max(iif(rw=1, group, null)) AS Group1,
max(iif(rw=2, group, null)) AS Group2,
max(iif(rw=3, group, null)) AS Group3
FROM
(
SELECT name,
group,
(select count(*)
from table9 t1
where yourtable.name = t1.name
and t1.id<= yourtable.id
) as rw
from yourtable
) AS d
GROUP BY name
ORDER BY name;
результат будет:
+-------+--------+--------+--------+
| name | Group1 | Group2 | Group3 |
+-------+--------+--------+--------+
| Barry | 2A | | |
| John | 2A | 1B | |
| Ron | 1B | 2A | 2C |
+-------+--------+--------+--------+
почему разве вы не ожидаете, что группы будут в одних и тех же колонках? '2A' в' Group2', '1B' в' Group1' и т. Д.? – Malachi
Для Рона, что решает, какое значение входит в группу 1? Непонятно, почему «1B» идет туда вместо «2A» или «2C». –