На самом деле вы можете использовать кросс-таблицу с указанием MAX()
или MIN()
, которая может работать с нечисловыми данными. Однако, как вы можете видеть, имена столбцов повторяют их соответствующее значение.
TRANSFORM MAX(t.Date) AS MaxOfUDate
SELECT t.User
FROM TableData t
GROUP BY t.User
PIVOT t.UDate;
-- User Sept 1 2016 Sept 2 2016 Sept 3 2016 Sept 5 2016 Sept 6 2016 Sept 7 2016
-- Bobcat Sept 1 2016 Sept 2 2016 Sept 3 2016 Sept 5 2016 Sept 6 2016 Sept 7 2016
-- Cat Sept 1 2016 Sept 2 2016 Sept 3 2016
Чтобы получить имена различных столбцов, следует использовать в период между запросом, который вы затем запустить перекрестную вкладку:
SELECT t.ID, t.User, t.Date,
'Day' & Day(CDate(t.Date)) As DayCol
FROM TableData t;
-- ID User UDate DayCol
-- 1 Cat Sept 1 2016 Day1
-- 2 Cat Sept 2 2016 Day2
-- 3 Cat Sept 3 2016 Day3
-- 4 Bobcat Sept 1 2016 Day1
-- 5 Bobcat Sept 2 2016 Day2
-- 6 Bobcat Sept 3 2016 Day3
-- 7 Bobcat Sept 5 2016 Day5
-- 8 Bobcat Sept 6 2016 Day6
-- 9 Bobcat Sept 7 2016 Day7
TRANSFORM MAX(q.Date) AS MaxOfUDate
SELECT q.User
FROM TableDataQ q
GROUP BY q.User
PIVOT q.DayCol;
-- User Day1 Day2 Day3 Day5 Day6 Day7
-- Bobcat Sept 1 2016 Sept 2 2016 Sept 3 2016 Sept 5 2016 Sept 6 2016 Sept 7 2016
-- Cat Sept 1 2016 Sept 2 2016 Sept 3 2016
Наконец, вы заметите, что вкладка кросс не включает в себя последовательные дни что нет соответствующих данных (например, Day4). К счастью, вы можете указать столбцы в предложении PIVOT...IN()
:
TRANSFORM MAX(q.Date) AS MaxOfUDate
SELECT q.User
FROM TableDataQ q
GROUP BY q.User
PIVOT q.DayCol IN ('Day1', 'Day2', 'Day3', 'Day4', 'Day5',
'Day6', 'Day7', 'Day8', 'Day9', 'Day10',
'Day11', 'Day12', 'Day13', 'Day14', 'Day15',
'Day16', 'Day17', 'Day18', 'Day19', 'Day20',
'Day21', 'Day22', 'Day23', 'Day24', 'Day25',
'Day26', 'Day27', 'Day28', 'Day29', 'Day30', 'Day31');
-- User Day1 Day2 Day3 Day4 Day5 Day6 ...
-- Bobcat Sept 1 2016 Sept 2 2016 Sept 3 2016 Sept 5 2016 Sept 6 2016 ...
-- Cat Sept 1 2016 Sept 2 2016 Sept 3 2016
быстро исправить, хотя это не мифологическое, чтобы скопировать и вставить транспонирование или создать его в VBA с помощью функции транспонирования. – user3553260
Я рассмотрел этот метод, но это часть «отчета», который нужно создавать ежемесячно, и я, возможно, не могу этого сделать. – Macellaria
Просьба показать больше образцов данных. Что произойдет, если есть несколько категорий? – Andre