Solved

Help with a SQL Query

Posted on 2013-05-10
6
286 Views
Last Modified: 2013-05-10
My tables look like this:

TableA
-------------
Emp_id    |Name
 11           | John
 18           | Karen
 21           | Tim


TableB
--------------
Visit_id   | City
1             |  Moscow
2             |  Tokyo
3             |  Frankfurt
4             |  Miami


TableC
-------------
Emp_id   | Visit_id
11           |  2  
21           |  1  
11           |  2
18           |  4  
18           |  3
18           |  2


I need a query that will take the tables above and do this:

Emp_id    |  Name   |  Moscow   |  Tokyo   |  Frankfurt   |  Miami  
11            |   John    |                  |       X      |                    |
18            |  Karen   |                 |       X      |        X          |       X
21            |  Tim      |        X       |               |                    |
Total:       |              |        1       |       2      |          1        |       1

Note: I don't mind having to hardcode the cities into the query (in fact, that might be a plus because I'll want control over the order of the city columns).  Also, the 'X's don't have to be X's...they can be replaced by 1's (or whatever).  Finally, the totals-line in the example is not absolutely necessary (I'm exporting this to Excel and the users could add that themselves).

Appreciate it.
0
Comment
Question by:David L. Hansen
  • 3
  • 3
6 Comments
 
LVL 40

Expert Comment

by:Sharath
ID: 39157175
can you try this?
Transform count(TableB.City) as cnt
select TableA.Emp_id,TableA.Name
  from ((TableA 
  inner join TableC on TableA.Emp_id = TableC.Emp_id)
 inner join TableB on TableB.Visit_id = TableC.Visit_id)
 group by TableA.Emp_id,TableA.Name
pivot TableB.City;

Open in new window

0
 
LVL 15

Author Comment

by:David L. Hansen
ID: 39157205
That's amazing!  Thanks so much.  The points are yours.  
Could you give some pointers on how I can manipulate the order of the columns?
0
 
LVL 40

Expert Comment

by:Sharath
ID: 39157233
check if this helps.
Transform count(TableB.City) as cnt
select TableA.Emp_id,TableA.Name
  from ((TableA 
  inner join TableC on TableA.Emp_id = TableC.Emp_id)
 inner join TableB on TableB.Visit_id = TableC.Visit_id)
 where TableB.City IN ('Moscow','Tokyo','Frankfurt','Miami')
 group by TableA.Emp_id,TableA.Name
pivot TableB.City;

Open in new window

0
IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 
LVL 40

Accepted Solution

by:
Sharath earned 500 total points
ID: 39157235
sorry, this.
Transform count(TableB.City) as cnt
select TableA.Emp_id,TableA.Name
  from ((TableA 
  inner join TableC on TableA.Emp_id = TableC.Emp_id)
 inner join TableB on TableB.Visit_id = TableC.Visit_id)
 group by TableA.Emp_id,TableA.Name
pivot TableB.City IN ('Moscow','Tokyo','Frankfurt','Miami');

Open in new window

0
 
LVL 15

Author Comment

by:David L. Hansen
ID: 39157278
Very nice!
0
 
LVL 15

Author Comment

by:David L. Hansen
ID: 39157314
If you are still here Sharath I'm about to post another question about exporting this query into an excel spreadsheet.  I've got this working except that all the columns are the same width (a bit too narrow).

I'm using this code:
DoCmd.OutputTo acOutputQuery, "OptCouncilRpt", acFormatXLS, "C:\Temp\OptCouncilRpt" & Format(Date, "yyyymmdd") & ".xls"

Open in new window


Here is the link:
http://www.experts-exchange.com/Software/Office_Productivity/Office_Suites/MS_Office/Excel/Q_28124952.html
0

Featured Post

Complete Microsoft Windows PC® & Mac Backup

Backup and recovery solutions to protect all your PCs & Mac– on-premises or in remote locations. Acronis backs up entire PC or Mac with patented reliable disk imaging technology and you will be able to restore workstations to a new, dissimilar hardware in minutes.

Join & Write a Comment

In the previous article, Using a Critera Form to Filter Records (http://www.experts-exchange.com/A_6069.html), the form was basically a data container storing user input, which queries and other database objects could read. The form had to remain op…
In the article entitled Working with Objects – Part 1 (http://www.experts-exchange.com/Microsoft/Development/MS_Access/A_4942-Working-with-Objects-Part-1.html), you learned the basics of working with objects, properties, methods, and events. In Work…
As developers, we are not limited to the functions provided by the VBA language. In addition, we can call the functions that are part of the Windows operating system. These functions are part of the Windows API (Application Programming Interface). U…
Learn how to number pages in an Access report over each group. Activate two pass printing by referencing the pages property: Add code to the Page Footers OnFormat event to capture the pages as there occur for each group. Use the pages property to …

743 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now