Discussion:
Crosstab Query by Week with Dates as Headers
(too old to reply)
ceedge
2010-04-15 06:59:01 UTC
Permalink
Hi

I am trying to write a crosstab query in Access that will give me the totals
by week for each person.

My data contains a list a people with dates and amounts. Here is a small
sample of the data over five weeks for one person. I tried to put it in as a
table but it wouldn't let me so spaces are breaking the columns:

Date Name Supervisor Manager Amt
03/08/2010 Agent1 Supv1 Mgr1 3
03/07/2010 Agent1 Supv1 Mgr1 5
03/04/2010 Agent1 Supv1 Mgr1 8
03/03/2010 Agent1 Supv1 Mgr1 5
03/01/2010 Agent1 Supv1 Mgr1 9
02/28/2010 Agent1 Supv1 Mgr1 1
02/15/2010 Agent1 Supv1 Mgr1 6
02/14/2010 Agent1 Supv1 Mgr1 12

What I’d like to get back as the results is a list of each person with a
total for each week. The columns by week number but have the column header
show the date for Monday of that week. In this sample of data 02/08 is the
7th week of the year, 02/15 is the 8th week, etc. Below is what I want the
results to look like but I’ve only given Agent1 data but the other agents
would have data as well:

Name Supervisor Manager Totals 02/08 02/15 02/22 03/01 03/08
Agent1 Supv1 Mgr1 74 12 6 1 27 28

Just to Clarify the field called “Field3” is Name in my chart above but I
have Access set to display “Name” instead of “Field3.” “Amt” is the same as
“CountOfAgent” and “Total” is the same as “Total Of CountOfAgent”

Here is my code in the SQL view and the results I’m currently getting. This
will group by week correctly but the results give the week number as the
header. When I give this report out, I want them to be able to see the week
date (for Monday of the week) as they will not know what the week number
means. I could use this query as is to get the results and then manually go
into the data and put in the Date for the week if I had to for now as that
wouldn’t take much time with only currently at 16 weeks in the year but as
the year continues that will be time consuming.

My Code:
TRANSFORM Sum([Repeats Table].CountOfAgent) AS SumOfCountOfAgent

SELECT [Repeats Table].Field3, [Repeats Table].Supervisor, [Repeats
Table].Manager, Sum([Repeats Table].CountOfAgent) AS [Total Of CountOfAgent]

FROM [Repeats Table]

GROUP BY [Repeats Table].Field3, [Repeats Table].Supervisor, [Repeats
Table].Manager

PIVOT "Wk# " & Format(Format([Date],"ww",2),"00");


The results of my code as written currently:

Name Supervisor Manager Totals Wk# 7 Wk# 8 Wk# 9 Wk# 10 Wk# 11
Agent1 Supv1 Mgr1 74 12 6 1 27
28

I’ve looked in Access books, online help, and googled various sites, but
nothing works correctly even though it seems to work for the people they
posted it for so I’m not sure what I’m doing wrong. I’ve tried various
combinations of Format(), DateAdd(), DatePart(), etc, but I’m missing
something. Here are a few things I tried and the results that are not
correct.

I’ve tried this which is something I found looking around but I got a syntax
error. It is from this website and the issue listed is very similar to what
I’m doing: http://www.keyongtech.com/239881-cross-tab-query-group-by

Pivot DateAdd("d",Weekday[Date],2)+1,[Date]);

This one gave me dates in this year but not the correct grouping.
2/16/2010, 2/21/2010, 2/22/2010, etc.

PIVOT DateAdd("d",Weekday(Format([Date],"ww",2)),[Date] );

This did a grouping of 8 headers with dates of 1/2/1900, 1/3/1900, etc and
I’m not sure how it is grouping the data

PIVOT DateAdd("d",Weekday(Format([Date],"ww",2)),2);

This gives me the week # then the date but list each date and doesn’t group
by week, but I can see it is putting the correct days with weeks:

PIVOT "Wk#" &Format(DatePart("ww",[Date]),"00 ") &Format([Date]," mm/dd");

I even thought maybe I need to define my formatting by week number but this
gives me a Transform error. I tried not defining it but doing the format in
the Sort By using this but that gives syntax errors:

TRANSFORM Sum([Repeats Table].CountOfAgent) AS SumOfCountOfAgent,
Format(Format([Date],"ww",2),"00") AS WeekNumber

SELECT [Repeats Table].Field3, [Repeats Table].Supervisor, [Repeats
Table].Manager, Sum([Repeats Table].CountOfAgent) AS [Total Of CountOfAgent]

FROM [Repeats Table]

GROUP BY [Repeats Table].Field3, [Repeats Table].Supervisor, [Repeats
Table].Manager

SORT BY WeekNumber

PIVOT Format([Date]," mm/dd");

Hopefully this post has all the information you need and not too long. This
is driving me crazy as I know I’m missing something simple or being clueless,
but I've yet to figure it out. Any help would be great.


Thanks in advance

cee
vanderghast
2010-04-15 12:43:17 UTC
Permalink
Given a date, the following expression returns the Monday of the same week
(starting Sunday)


[Date] -DatePart("w", [Date] ) + 2



or, if you prefer:

TRANSFORM SUM(amt) AS cell
SELECT [name], supervisor, SUM(cell) AS totalForThisAgent
FROM somewhere
GROUP BY [name], supervisor
PIVOT [Date] -DatePart("w", [Date] ) + 2



Vanderghast, Access MVP
Post by ceedge
Hi
I am trying to write a crosstab query in Access that will give me the totals
by week for each person.
My data contains a list a people with dates and amounts. Here is a small
sample of the data over five weeks for one person. I tried to put it in as a
Date Name Supervisor Manager Amt
03/08/2010 Agent1 Supv1 Mgr1 3
03/07/2010 Agent1 Supv1 Mgr1 5
03/04/2010 Agent1 Supv1 Mgr1 8
03/03/2010 Agent1 Supv1 Mgr1 5
03/01/2010 Agent1 Supv1 Mgr1 9
02/28/2010 Agent1 Supv1 Mgr1 1
02/15/2010 Agent1 Supv1 Mgr1 6
02/14/2010 Agent1 Supv1 Mgr1 12
What I’d like to get back as the results is a list of each person with a
total for each week. The columns by week number but have the column header
show the date for Monday of that week. In this sample of data 02/08 is the
7th week of the year, 02/15 is the 8th week, etc. Below is what I want the
results to look like but I’ve only given Agent1 data but the other agents
Name Supervisor Manager Totals 02/08 02/15 02/22 03/01 03/08
Agent1 Supv1 Mgr1 74 12 6 1 27
28
Just to Clarify the field called “Field3” is Name in my chart above but I
have Access set to display “Name” instead of “Field3.” “Amt” is the same as
“CountOfAgent” and “Total” is the same as “Total Of CountOfAgent”
Here is my code in the SQL view and the results I’m currently getting.
This
will group by week correctly but the results give the week number as the
header. When I give this report out, I want them to be able to see the week
date (for Monday of the week) as they will not know what the week number
means. I could use this query as is to get the results and then manually go
into the data and put in the Date for the week if I had to for now as that
wouldn’t take much time with only currently at 16 weeks in the year but as
the year continues that will be time consuming.
TRANSFORM Sum([Repeats Table].CountOfAgent) AS SumOfCountOfAgent
SELECT [Repeats Table].Field3, [Repeats Table].Supervisor, [Repeats
Table].Manager, Sum([Repeats Table].CountOfAgent) AS [Total Of
CountOfAgent]
FROM [Repeats Table]
GROUP BY [Repeats Table].Field3, [Repeats Table].Supervisor, [Repeats
Table].Manager
PIVOT "Wk# " & Format(Format([Date],"ww",2),"00");
Name Supervisor Manager Totals Wk# 7 Wk# 8 Wk# 9 Wk# 10 Wk# 11
Agent1 Supv1 Mgr1 74 12 6 1 27
28
I’ve looked in Access books, online help, and googled various sites, but
nothing works correctly even though it seems to work for the people they
posted it for so I’m not sure what I’m doing wrong. I’ve tried various
combinations of Format(), DateAdd(), DatePart(), etc, but I’m missing
something. Here are a few things I tried and the results that are not
correct.
I’ve tried this which is something I found looking around but I got a syntax
error. It is from this website and the issue listed is very similar to what
I’m doing: http://www.keyongtech.com/239881-cross-tab-query-group-by
Pivot DateAdd("d",Weekday[Date],2)+1,[Date]);
This one gave me dates in this year but not the correct grouping.
2/16/2010, 2/21/2010, 2/22/2010, etc.
PIVOT DateAdd("d",Weekday(Format([Date],"ww",2)),[Date] );
This did a grouping of 8 headers with dates of 1/2/1900, 1/3/1900, etc and
I’m not sure how it is grouping the data
PIVOT DateAdd("d",Weekday(Format([Date],"ww",2)),2);
This gives me the week # then the date but list each date and doesn’t group
PIVOT "Wk#" &Format(DatePart("ww",[Date]),"00 ") &Format([Date]," mm/dd");
I even thought maybe I need to define my formatting by week number but this
gives me a Transform error. I tried not defining it but doing the format in
TRANSFORM Sum([Repeats Table].CountOfAgent) AS SumOfCountOfAgent,
Format(Format([Date],"ww",2),"00") AS WeekNumber
SELECT [Repeats Table].Field3, [Repeats Table].Supervisor, [Repeats
Table].Manager, Sum([Repeats Table].CountOfAgent) AS [Total Of
CountOfAgent]
FROM [Repeats Table]
GROUP BY [Repeats Table].Field3, [Repeats Table].Supervisor, [Repeats
Table].Manager
SORT BY WeekNumber
PIVOT Format([Date]," mm/dd");
Hopefully this post has all the information you need and not too long. This
is driving me crazy as I know I’m missing something simple or being clueless,
but I've yet to figure it out. Any help would be great.
Thanks in advance
cee
John Spencer
2010-04-15 13:21:27 UTC
Permalink
You can use an expression to calculate Monday of the week.

DateAdd("d",1-Weekday([DateField],2),[DateField])

That expression will return the date of the Monday before Sunday. So weeks
run from Monday to Sunday. If you need Sundays to be accounted for on the
basis of the week running from Sunday To Saturday, post back. I will try to
come up with a simple modification to the above that will work. Probably
calculate the Sunday of the week and then add one to that.

John Spencer
Access MVP 2002-2005, 2007-2010
The Hilltop Institute
University of Maryland Baltimore County
Post by ceedge
Hi
I am trying to write a crosstab query in Access that will give me the totals
by week for each person.
My data contains a list a people with dates and amounts. Here is a small
sample of the data over five weeks for one person. I tried to put it in as a
Date Name Supervisor Manager Amt
03/08/2010 Agent1 Supv1 Mgr1 3
03/07/2010 Agent1 Supv1 Mgr1 5
03/04/2010 Agent1 Supv1 Mgr1 8
03/03/2010 Agent1 Supv1 Mgr1 5
03/01/2010 Agent1 Supv1 Mgr1 9
02/28/2010 Agent1 Supv1 Mgr1 1
02/15/2010 Agent1 Supv1 Mgr1 6
02/14/2010 Agent1 Supv1 Mgr1 12
What I’d like to get back as the results is a list of each person with a
total for each week. The columns by week number but have the column header
show the date for Monday of that week. In this sample of data 02/08 is the
7th week of the year, 02/15 is the 8th week, etc. Below is what I want the
results to look like but I’ve only given Agent1 data but the other agents
Name Supervisor Manager Totals 02/08 02/15 02/22 03/01 03/08
Agent1 Supv1 Mgr1 74 12 6 1 27 28
Just to Clarify the field called “Field3” is Name in my chart above but I
have Access set to display “Name” instead of “Field3.” “Amt” is the same as
“CountOfAgent” and “Total” is the same as “Total Of CountOfAgent”
Here is my code in the SQL view and the results I’m currently getting. This
will group by week correctly but the results give the week number as the
header. When I give this report out, I want them to be able to see the week
date (for Monday of the week) as they will not know what the week number
means. I could use this query as is to get the results and then manually go
into the data and put in the Date for the week if I had to for now as that
wouldn’t take much time with only currently at 16 weeks in the year but as
the year continues that will be time consuming.
TRANSFORM Sum([Repeats Table].CountOfAgent) AS SumOfCountOfAgent
SELECT [Repeats Table].Field3, [Repeats Table].Supervisor, [Repeats
Table].Manager, Sum([Repeats Table].CountOfAgent) AS [Total Of CountOfAgent]
FROM [Repeats Table]
GROUP BY [Repeats Table].Field3, [Repeats Table].Supervisor, [Repeats
Table].Manager
PIVOT "Wk# " & Format(Format([Date],"ww",2),"00");
Name Supervisor Manager Totals Wk# 7 Wk# 8 Wk# 9 Wk# 10 Wk# 11
Agent1 Supv1 Mgr1 74 12 6 1 27
28
I’ve looked in Access books, online help, and googled various sites, but
nothing works correctly even though it seems to work for the people they
posted it for so I’m not sure what I’m doing wrong. I’ve tried various
combinations of Format(), DateAdd(), DatePart(), etc, but I’m missing
something. Here are a few things I tried and the results that are not
correct.
I’ve tried this which is something I found looking around but I got a syntax
error. It is from this website and the issue listed is very similar to what
I’m doing: http://www.keyongtech.com/239881-cross-tab-query-group-by
Pivot DateAdd("d",Weekday[Date],2)+1,[Date]);
This one gave me dates in this year but not the correct grouping.
2/16/2010, 2/21/2010, 2/22/2010, etc.
PIVOT DateAdd("d",Weekday(Format([Date],"ww",2)),[Date] );
This did a grouping of 8 headers with dates of 1/2/1900, 1/3/1900, etc and
I’m not sure how it is grouping the data
PIVOT DateAdd("d",Weekday(Format([Date],"ww",2)),2);
This gives me the week # then the date but list each date and doesn’t group
PIVOT "Wk#" &Format(DatePart("ww",[Date]),"00 ") &Format([Date]," mm/dd");
I even thought maybe I need to define my formatting by week number but this
gives me a Transform error. I tried not defining it but doing the format in
TRANSFORM Sum([Repeats Table].CountOfAgent) AS SumOfCountOfAgent,
Format(Format([Date],"ww",2),"00") AS WeekNumber
SELECT [Repeats Table].Field3, [Repeats Table].Supervisor, [Repeats
Table].Manager, Sum([Repeats Table].CountOfAgent) AS [Total Of CountOfAgent]
FROM [Repeats Table]
GROUP BY [Repeats Table].Field3, [Repeats Table].Supervisor, [Repeats
Table].Manager
SORT BY WeekNumber
PIVOT Format([Date]," mm/dd");
Hopefully this post has all the information you need and not too long. This
is driving me crazy as I know I’m missing something simple or being clueless,
but I've yet to figure it out. Any help would be great.
Thanks in advance
cee
ceedge
2010-04-16 15:28:01 UTC
Permalink
Thanks so much that works.
Post by John Spencer
You can use an expression to calculate Monday of the week.
DateAdd("d",1-Weekday([DateField],2),[DateField])
That expression will return the date of the Monday before Sunday. So weeks
run from Monday to Sunday. If you need Sundays to be accounted for on the
basis of the week running from Sunday To Saturday, post back. I will try to
come up with a simple modification to the above that will work. Probably
calculate the Sunday of the week and then add one to that.
John Spencer
Access MVP 2002-2005, 2007-2010
The Hilltop Institute
University of Maryland Baltimore County
Post by ceedge
Hi
I am trying to write a crosstab query in Access that will give me the totals
by week for each person.
My data contains a list a people with dates and amounts. Here is a small
sample of the data over five weeks for one person. I tried to put it in as a
Date Name Supervisor Manager Amt
03/08/2010 Agent1 Supv1 Mgr1 3
03/07/2010 Agent1 Supv1 Mgr1 5
03/04/2010 Agent1 Supv1 Mgr1 8
03/03/2010 Agent1 Supv1 Mgr1 5
03/01/2010 Agent1 Supv1 Mgr1 9
02/28/2010 Agent1 Supv1 Mgr1 1
02/15/2010 Agent1 Supv1 Mgr1 6
02/14/2010 Agent1 Supv1 Mgr1 12
What I’d like to get back as the results is a list of each person with a
total for each week. The columns by week number but have the column header
show the date for Monday of that week. In this sample of data 02/08 is the
7th week of the year, 02/15 is the 8th week, etc. Below is what I want the
results to look like but I’ve only given Agent1 data but the other agents
Name Supervisor Manager Totals 02/08 02/15 02/22 03/01 03/08
Agent1 Supv1 Mgr1 74 12 6 1 27 28
Just to Clarify the field called “Field3” is Name in my chart above but I
have Access set to display “Name” instead of “Field3.” “Amt” is the same as
“CountOfAgent” and “Total” is the same as “Total Of CountOfAgent”
Here is my code in the SQL view and the results I’m currently getting. This
will group by week correctly but the results give the week number as the
header. When I give this report out, I want them to be able to see the week
date (for Monday of the week) as they will not know what the week number
means. I could use this query as is to get the results and then manually go
into the data and put in the Date for the week if I had to for now as that
wouldn’t take much time with only currently at 16 weeks in the year but as
the year continues that will be time consuming.
TRANSFORM Sum([Repeats Table].CountOfAgent) AS SumOfCountOfAgent
SELECT [Repeats Table].Field3, [Repeats Table].Supervisor, [Repeats
Table].Manager, Sum([Repeats Table].CountOfAgent) AS [Total Of CountOfAgent]
FROM [Repeats Table]
GROUP BY [Repeats Table].Field3, [Repeats Table].Supervisor, [Repeats
Table].Manager
PIVOT "Wk# " & Format(Format([Date],"ww",2),"00");
Name Supervisor Manager Totals Wk# 7 Wk# 8 Wk# 9 Wk# 10 Wk# 11
Agent1 Supv1 Mgr1 74 12 6 1 27
28
I’ve looked in Access books, online help, and googled various sites, but
nothing works correctly even though it seems to work for the people they
posted it for so I’m not sure what I’m doing wrong. I’ve tried various
combinations of Format(), DateAdd(), DatePart(), etc, but I’m missing
something. Here are a few things I tried and the results that are not
correct.
I’ve tried this which is something I found looking around but I got a syntax
error. It is from this website and the issue listed is very similar to what
I’m doing: http://www.keyongtech.com/239881-cross-tab-query-group-by
Pivot DateAdd("d",Weekday[Date],2)+1,[Date]);
This one gave me dates in this year but not the correct grouping.
2/16/2010, 2/21/2010, 2/22/2010, etc.
PIVOT DateAdd("d",Weekday(Format([Date],"ww",2)),[Date] );
This did a grouping of 8 headers with dates of 1/2/1900, 1/3/1900, etc and
I’m not sure how it is grouping the data
PIVOT DateAdd("d",Weekday(Format([Date],"ww",2)),2);
This gives me the week # then the date but list each date and doesn’t group
PIVOT "Wk#" &Format(DatePart("ww",[Date]),"00 ") &Format([Date]," mm/dd");
I even thought maybe I need to define my formatting by week number but this
gives me a Transform error. I tried not defining it but doing the format in
TRANSFORM Sum([Repeats Table].CountOfAgent) AS SumOfCountOfAgent,
Format(Format([Date],"ww",2),"00") AS WeekNumber
SELECT [Repeats Table].Field3, [Repeats Table].Supervisor, [Repeats
Table].Manager, Sum([Repeats Table].CountOfAgent) AS [Total Of CountOfAgent]
FROM [Repeats Table]
GROUP BY [Repeats Table].Field3, [Repeats Table].Supervisor, [Repeats
Table].Manager
SORT BY WeekNumber
PIVOT Format([Date]," mm/dd");
Hopefully this post has all the information you need and not too long. This
is driving me crazy as I know I’m missing something simple or being clueless,
but I've yet to figure it out. Any help would be great.
Thanks in advance
cee
.
a***@gmail.com
2013-06-26 23:31:48 UTC
Permalink
Hi John,
Thank you so much for posting this solution. I have the exact same problem and this works for me as well except for one thing - how do I make the week run from Monday to Friday? I am trying to sum by week for weekdays only the # of claims done by process by supervisor and manager. For example, I know the week of 5/13/13 (Monday) thru 5/17/13 (Friday) a processor completed 40 claims, however, using this function, it shows that the processor completed 50 claims for the week of 5/13/13. Others processors show 60 per week, when it should be no more than 50. Thanks in advance for any help!!
John W. Vinson
2013-06-28 02:41:17 UTC
Permalink
Post by a***@gmail.com
Hi John,
Thank you so much for posting this solution. I have the exact same problem and this
works for me as well except for one thing - how do I make the week run from
Monday to Friday? I am trying to sum by week for weekdays only the # of claims
done by process by supervisor and manager. For example, I know the week of
5/13/13 (Monday) thru 5/17/13 (Friday) a processor completed 40 claims,
however, using this function, it shows that the processor completed 50 claims
for the week of 5/13/13. Others processors show 60 per week, when it should
be no more than 50. Thanks in advance for any help!!


I have no idea if I'm the "John" mentioned, but since you did not quote the
previous message to which you're responding and since it's (apparently)
expired from my news feed, it's very hard indeed to provide any useful advice.

Could you perhaps post a description of your table structure, the SQL of the
query you're using, and the VBA code of the function (if it is a function)?
--
John W. Vinson [MVP]
Microsoft's replacements for these newsgroups:
http://social.msdn.microsoft.com/Forums/en-US/accessdev/
http://social.answers.microsoft.com/Forums/en-US/addbuz/
and see also http://www.utteraccess.com
Tammy Creason
2023-06-14 19:24:38 UTC
Permalink
I was wondering if someone could help me! I am new to Access, I am trying to make a CrossTab Query using the following information:

Core Number, Quanity and then how many of that core for the week.

So for example:

Core Number: Quantity: Week of 6/16/23 Week of 6/9/23 Week of 6/2/23 ..............
116708B (updates)(14) 5 3 6

116709B 24 10 8 6


How can I do this?

Loading...