目前,我的Access表上的数据如下所示:
Cat| Sept 1 2016
Cat| Sept 2 2016
Cat| Sept 3 2016
Bobcat| Sept 1 2016
Bobcat| Sept 2 2016
Bobcat| Sept 3 2016
Bobcat| Sept 5 2016
Bobcat| Sept 6 2016
Bobcat| Sept 7 2016
我需要将数据显示为:
Cat| Sept 1 2016| Sept 2 2016| Sept 3 2016
Bobcat| Sept 1 2016| Sept 2 2016| Sept 3 2016|Null| Sept 5 2016| Sept 6 2016| Sept 7 2016
字段名称为"名称" "日期1","日期2","日期3" ...."日期31"。我不习惯使用这种格式。
当我尝试交叉表查询时,我得到的是2016年9月1日的日期| 2016年9月2日| 2016年9月3日成为我的字段名称,然后显示计数(或MAX,LAST,MIN等)。但是,我需要将这些日期显示为数据。我该怎么做?
答案 0 :(得分:1)
实际上,您可以使用交叉表指定可以在非数字数据上运行的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